我有一个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");
}',
)
);
在控制器中的操作中,我使用红色部分,如下所示,
$this->renderPartial('view',array('model'=>$this->loadModel()),false,true);
由于我将进程输出设置为 true,因此 ajax 提交按钮工作正常。但它一直在执行(对于我点击的次数)。我希望它在单击提交按钮时仅执行一次。如果有人能帮我解决这个问题,那就太好了。我一整天都在努力解决这个问题。
好的,
我解决了解决方案。正在发生的事情是,ajax 请求根据 ID 触发。每次通过 ajax 重新加载div 时,都会加载一个新的委托/事件,指向他之前的同一个 ID。因此,当您实际单击按钮时,两个代表都将完成他们的工作,因为两者都与单击的按钮匹配。
此问题有两种解决方案。一种是每次生成按钮时都有一个唯一的 id,如下所示,
array('id' => 'next-category-'.uniqid());
另一种方式,这就是我解决它的方式,
array("id"=>"next-category", "live"=>false);
live:布尔值,事件处理程序是应附加 live/delegate 还是直接样式。如果未设置,将使用实时事件。将此提供给提交按钮解决了它。
最好为 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代码中的某个错误。
在 jQuery 的帮助下,你可以定义以下代码来"完成"函数:
function() {
$('input[type=submit]").attr("disabled", "disabled");
}
因此,如果我理解正确,成功完成您的按钮将被禁用重新推送。
不要忘记将 css 选择器输入 [type=submit] 修改为 CSS 选择器您的按钮。
解决方案 2:将 CHtml::ajaxButton 放入
if (!Yii::app()->request->isAjaxRequest) {
}
然后,当您通过ajax加载内容时,您的按钮将不会显示在页面上