我在我的视图中使用ajaxlink添加我的submitform的新行。我需要一个索引来指示创建了哪一行。所以我使用一个类来保存索引。但我发现变量只改变了一次。
这是我的代码
public function actionNewrow()
{
$this->i++;
$form = new CActiveForm();
$temp = new exportprice();
array_push($this->exps, $temp);
//echo count($this->exps);
$i = count($this->exps)-1;
$html = '<tr><td>'.
$this->i.$form->labelEx($this->exps[0],'['.$i.']productname').$form->textField($this->exps[0],'['.$i.']productname').$form->error($this->exps[0],'['.$i.']productname')
.'</td>'.
'<td>'.
$form->labelEx($this->exps[0],'['.$i.']trend').$form->textField($this->exps[0],'['.$i.']trend').$form->error($this->exps[0],'['.$i.']trend')
.'</td>'.
'<td>'.
$form->labelEx($this->exps[0],'['.$i.']margin').$form->textField($this->exps[0],'['.$i.']margin').$form->error($this->exps[0],'['.$i.']margin')
.'</td></tr>';
echo $html;
}
echo CHtml::ajaxLink("新增",
Yii::app()->createUrl( 'InputReport/newrow' ),
// ajax options
array(
'error' => 'function(data) { alert("error!"); }',
'success' => 'function(data) { $("#exptbl").append(data); }',
'cache'=>false,
),
// htmloptions
array(
'id' => 'handleClick',
)
);
答案 0 :(得分:0)
所以你通过AJAX调用actionNewrow
到你每次都要预先定义的类varialbe $i
?那就是原因。 PHP与客户端不一致,因为$i
在以这种方式使用时总是等于先前的值++
它只会使它成为一次。
您需要在客户端以某种方式向我们发送$i
来发送它:
ajaxLink
构建器之外)中使用它来使用JS中的$i
var作为类var来传播新行。 一个简单的例子:
var i = <?php echo $this->i // presuming i is a controller car you pass to the view ?>;
$('.add_new_row').on('click', function(){
$.get('InputReport/newrow', {i:i}, function(data){
//append your row now
i++; // inc i here
});
});
然后在你的控制器中你会做类似的事情:
public function actionNewrow($i = null)
{
$i = $i===null ? $this->i++ : $i;
$form = new CActiveForm();
$temp = new exportprice();
array_push($this->exps, $temp);
//echo count($this->exps);
$i = count($this->exps)-1;
$html = '<tr><td>'.
$this->i.$form->labelEx($this->exps[0],'['.$i.']productname').$form->textField($this->exps[0],'['.$i.']productname').$form->error($this->exps[0],'['.$i.']productname')
.'</td>'.
'<td>'.
$form->labelEx($this->exps[0],'['.$i.']trend').$form->textField($this->exps[0],'['.$i.']trend').$form->error($this->exps[0],'['.$i.']trend')
.'</td>'.
'<td>'.
$form->labelEx($this->exps[0],'['.$i.']margin').$form->textField($this->exps[0],'['.$i.']margin').$form->error($this->exps[0],'['.$i.']margin')
.'</td></tr>';
echo $html;
}
这应该有希望帮助你,