我有一个页面添加项目的表,通过ajax渲染与renderpartial。每次用户添加一个项目时,我都会呈现包含所有项目的表。我也有一个ajaxlink来删除用户选择的项目。问题是,我只能删除表的最后一条记录,如果我点击其他ajaxlink,什么也没发生。
是用来搜索和添加项目的视图文件
<div class="row">
<?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name' => 'test_autocomplete',
'source'=>$this->createUrl('insumos/ver'),
'value' => "",
'options' => array(
'minChars'=>1,
'autoFill'=>false,
'focus'=> 'js:function( event, ui ) {
$( "#test_autocomplete" ).val( ui.item.label );
return false;
}',
'select'=>'js:function( event, ui ) {
$( "#Pedidos_codigoinsumo").val(ui.item.id);
$( "#Pedidos_codigo").val(ui.item.codigo);
$( "#Pedidos_nombre").val(ui.item.label);
$( "#Pedidos_cantidad").focus();
$( "#cantidades").show();
return false;
}',
),
'htmlOptions'=>array( 'autocomplete'=>'off'),
)); ?>
</div>
<div id="cantidades">
<div class="row">
<?php echo $form->labelEx($model,'codigo'); ?>
<?php echo $form->textField($model,'codigo',array('size'=>60,'maxlength'=>300)); ?>
<?php echo $form->hiddenField($model,'codigoinsumo'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'nombre'); ?>
<?php echo $form->textField($model,'nombre',array('size'=>60,'maxlength'=>300)); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'cantidad'); ?>
<?php echo $form->textField($model,'cantidad',array('size'=>60,'maxlength'=>300)); ?>
<?php echo $form->error($model,'codigoinsumo'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'observaciones'); ?>
<?php echo $form->textArea($model,'observaciones',array('rows'=>6, 'cols'=>50)); ?>
</div>
<?php echo CHtml::ajaxButton('Agregar', array('pedidos/adicion'), array('type'=>'POST','data'=>'js:$("#pedidoalmacen-form").serialize()','update'=>'#req_res02'));
echo CHtml::ajaxButton('Cancelar Pedido', array('pedidos/cancelar'), array('update'=>'#req_res02'));
?>
<?php $this->endWidget(); ?>
<div id="req_res02"></div>
包含表的视图为:
if($ver==1)
{
?>
<table>
<tr>
<td align="center">Borrar</td>
<td align="center">Código</td>
<td align="center">Insumo</td>
<td align="center">Cantidad</td>
<td align="center">Observaciones</td>
</tr>
<?php
$codigo= Yii::app()->session['pedido-codigo'];
$contado=count($codigo);
$i=0;
while($i<$contado)
{
?>
<tr>
<td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$codigo[$i]['contador'])),array('id'=>'quitar-'. uniqid())); ?></td>
<td align="left"><?php echo $codigo[$i]['contador']; ?></td>
<td align="left"><?php echo $codigo[$i]['insumo']; ?></td>
<td align="left"><?php echo $codigo[$i]['cantidad']; ?></td>
<td align="left"><?php echo $codigo[$i]['observaciones']; ?></td>
</tr>
<?php
$i++;
}
?>
</table>
<div class="row buttons">
<?php echo CHtml::submitButton('Agregar'); ?>
</div>
<?php
}
?>
,控制器为
public function actionAdicion()
{
$model=new Pedidos;
if(isset($_POST['Pedidos']))
{
$model->attributes=$_POST['Pedidos'];
if(isset(Yii::app()->session['pedido-codigo']))
{
$codigo= Yii::app()->session['pedido-codigo'];
$contador=count($codigo)+1;
$auxiliar=array('contador'=>$contador,'id'=>$model->codigoinsumo,'codigo'=>$model->codigo,'insumo'=>$model->nombre,'cantidad'=>$model->cantidad,'observaciones'=>$model->observaciones);
}
else
{
$auxiliar=array('contador'=>1,'id'=>$model->codigoinsumo,'codigo'=>$model->codigo,'insumo'=>$model->nombre,'cantidad'=>$model->cantidad,'observaciones'=>$model->observaciones);
}
$codigo[]=$auxiliar;
Yii::app()->session['pedido-codigo']=$codigo;
$this->renderPartial('insumosporpedir',array('ver'=>'1'),FALSE,TRUE);
//Yii::app()->end();
//echo $_POST['data1'];//CHtml::encode(print_r("hola", true));
}
}
public function actionCancelar()
{
unset(Yii::app()->session['pedido-codigo']);
$this->renderPartial('insumosporpedir',array('ver'=>'0'),FALSE,TRUE);
}
public function actionQuitar()
{
if(isset($_POST['dato']))
{
$codigo= Yii::app()->session['pedido-codigo'];
$compara=$_POST['dato'];
foreach ($codigo as $subkey => $subarray)
{
if($subarray['contador']==$compara)
{
unset($codigo[$subkey]);
//echo $codigo[$subkey];
}
}
$ver=1;
if(count($codigo)>0)
{
Yii::app()->session['pedido-codigo']=$codigo;
}
else
{
unset(Yii::app()->session['pedido-codigo']);
$ver=0;
}
//$this->layout='';
$this->renderPartial('insumosporpedir',array('ver'=>$ver),false,true);
//Yii::app()->end();
}
谢谢!
我找到问题了。问题不在于unset方法,而在于我显示数组值的视图。而不是使用
while($i<$contado)
{
?>
<tr>
<td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$codigo[$i]['contador'])),array('id'=>'quitar-'. uniqid())); ?></td>
<td align="left"><?php echo $codigo[$i]['contador']; ?></td>
<td align="left"><?php echo $codigo[$i]['insumo']; ?></td>
<td align="left"><?php echo $codigo[$i]['cantidad']; ?></td>
<td align="left"><?php echo $codigo[$i]['observaciones']; ?></td>
</tr>
<?php
$i++;
}
我把它换成
foreach ($codigo as $key => $value)
{
?>
<tr>
<td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$value['contador'])),array('id'=>'quitar-'. uniqid())); ?></td>
<td align="left"><?php echo $value['codigo']; ?></td>
<td align="left"><?php echo $value['insumo']; ?></td>
<td align="left"><?php echo $value['cantidad']; ?></td>
<td align="left"><?php echo $value['observaciones']; ?></td>
</tr>
<?php
}
出现错误是因为每次删除中间数组时键的连续性就会丢失