4

次のようにajax送信ボタンがあります。

    echo CHtml::ajaxSubmitButton(
        '>', $this->createUrl('/shop/category/nextCategory&id=16&store=true&gift_store='.$_GET['gift_store'].'&startValue='.$start_value.'&endValue='.$endValue), array(
        'type'=>'GET',
        'update'=>'#test',
        'beforeSend' => 'function(){
                        alert("beforeSend");
                        }',
        'complete' =>    'function(){
                            alert("complete");
                        }',
        )
    );

コントローラーでの私のアクションでは、次のように reder partial を使用します。

$this->renderPartial('view',array('model'=>$this->loadModel()),false,true);

processOutputをtrueに設定したので、ajax送信ボタンは正常に機能します。しかし、それは実行を続けます(クリックした回数だけ)。送信ボタンがクリックされたときに一度だけ実行したい。誰かがこれで私を助けることができれば、それは素晴らしいことです. 私は一日中これを修正しようとしています。

4

3 に答える 3

4

さて、私は解決策を解決しました。何が起こっているかというと、IDに基づいてajaxリクエストがトリガーされます。div が ajax を介してリロードされるたびに、新しいデリゲート/イベントがロードされ、前のデリゲートと同じ ID を指します。したがって、実際にボタンをクリックすると、両方のデリゲートがクリックされたボタンと一致するため、両方のデリゲートが仕事をします。

この問題には 2 つの解決策があります。次のように、ボタンが生成されるたびに一意のIDを持っています。

array('id' => 'next-category-'.uniqid());

別の方法で、これが私がそれを解決した方法です。

array("id"=>"next-category", "live"=>false);

live: イベント ハンドラーを live/delegate または direct スタイルでアタッチする必要があるかどうかのブール値。設定しないと liveEvents が使われます。これを送信ボタンに渡すと解決しました。

于 2012-08-09T10:18:46.603 に答える
1

jQuery の助けを借りて、次のコードを定義して関数を「完成させる」ことができます。

function() {
    $('input[type=submit]").attr("disabled", "disabled");
}

そのため、ボタンが正常に完了すると、ボタンの再プッシュが無効になります。

ボタンの CSS セレクターに CSS セレクター入力 [type=submit] を変更することを忘れないでください。

解決策2:CHtml::ajaxButtonをWapする

if (!Yii::app()->request->isAjaxRequest) {

}

次に、ajax を介してコンテンツをロードすると、ボタンはページに表示されません。

于 2012-08-08T09:38:19.280 に答える
1

ajax リクエスト用の normalizeUrl を作成した方がよいでしょう。

echo CHtml::ajaxSubmitButton(
            '>', CHtml::normalizeUrl(array('/shop/category/nextCategory',array('store'=>1,'gift_store'=>1,'startValue'=>1,'endValue'=>1))), array(
            'type'=>'GET',
            'update'=>'#test',
            'beforeSend' => 'function(){
                            alert("beforeSend");
                            }',
            'complete' =>    'function(){
                                alert("complete");
                            }',
            )
        );

このコードは完璧です、私はチェックしました。あなたのjsコードのどこかにエラーがあるようです。

于 2012-08-08T09:44:41.833 に答える