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

好的,我解决了解决方案。发生的事情是,ajax 请求是根据 ID 触发的。每次通过 ajax 重新加载 div 时,都会加载一个新的委托/事件,指向与他之前的相同的 ID。因此,当您实际单击按钮时,两个代表都会完成他们的工作,因为两者都与单击的按钮匹配。

这个问题有两种解决方案。一个是每次生成按钮时都有一个唯一的 id,如下所示,

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

另一种方式,这就是我解决它的方法,

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

live: 布尔值,事件处理程序是否应该以 live/delegate 或直接样式附加。如果未设置,将使用 liveEvents。将其交给提交按钮即可解决。

于 2012-08-09T10:18:46.603 回答
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 回答
1

借助 jQuery,您可以定义以下代码来“完成”功能:

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

因此,如果我理解正确,您的按钮将被禁用以重新推送。

不要忘记将 css 选择器 input[type=submit] 修改为您的按钮的 CSS 选择器。

解决方案 2:将您的 CHtml::ajaxButton 转换为

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

}

然后,当您通过 ajax 加载内容时,您的按钮将不会显示在页面上

于 2012-08-08T09:38:19.280 回答