0

ビューでajaxlinkを使用して、送信フォームの新しい行を追加します。どの行が作成されたかを示すインデックスが必要なので、クラス変数を使用してインデックスを保存します。しかし、変数は1回しか変更されないことがわかりました。

これが私のコードです

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',
    )
);
4

1 に答える 1

0

それで、あなたはactionNewrowAJAXを介して、毎回incする事前定義されたクラスvarialbe$iを呼び出していますか?それが理由です。PHPはクライアント側と一貫性がない$iため、この方法で使用すると常に以前の値と等しくなります。これにより、 PHPは++1回だけincになります。

$i次のいずれかをデチッピングから送信するには、クライアント側で何らかの方法が必要になります。

  • あなたが持っている行数から+1(これは重複を索引付けするために開かれています)
  • $ i varをJSに格納し、それを自己定義関数内(おそらくajaxLinkビルダーの外部)で使用して$i、JSの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;
}

これは少しうまくいけばあなたを助けるはずです、

于 2012-09-14T08:21:56.837 に答える