我在jquery UI模式对话框中有一个按钮。单击时,该按钮发送AJAX请求,并在MODAL DIALOG内部使用提交按钮打开html表单。
$('#buttonid').click(function(){
var id = $('.sec_id').val();
$.ajax({
url: "parts/hesabat_dialog.php",
cache: false,
data: {"id": id},
beforeSend: function() {
. . .
},
success: function(html){
. . .
}
});
return false;
});
然后我填写表单并单击提交按钮(这不是#buttonid
),我发送另一个ajax请求,表单的所有数据都发送到页面do.php。
$('#Formid').submit(function() {
var data = $('#Formid').serialize();
var id = $('#id').val();
var url = 'element.php?id='+id;
$.ajax({
type: "POST",
url: "parts/do.php",
cache: true,
data: data,
beforeSend: function() {
$('#dialog').append('Loading...');
},
success: function(data){
$("#dialog").load(url);
}
});
$("#Formid").unbind('submit');
return false;
});
所以,问题是如果我点击#buttonid
5或6次,那么提交请求将被发送6次。你可以说使用unbind
。好的,在这种情况下unbind应该有帮助,但是你知道有3个按钮,如果我点击另一个按钮并再次返回#buttonid
ajax请求将无效,如果我使用unbind
,然后关闭模态对话框,并重新打开它,ajax请求将无法再次运行。我提交时如何禁用多个请求(做一次),虽然按钮被点击了10次?
答案 0 :(得分:1)
$(document).ready(function(){
$('.one-click').click(function(){
if($(this).data('clicked')){
return false;
}
else {
$(this).data('clicked', true);
setTimeout(function(){
$('.one-click').data('clicked', false)
}, 2000);
}
});
});
使用数据变量将数据单击的值设置为true,并为后续请求返回false,一旦调用成功,再次将其设为false并完成。
答案 1 :(得分:1)
我在我正在加载的AJAX HTML文件中包含了js文件。当我从DOM重新加载或清除HTML时,它仍然保留脚本。我将脚本移出,因此它不是正在加载的HTML的一部分。
答案 2 :(得分:0)
您可以定义一个变量(在按钮操作范围之外),其中包含ajax请求的状态。
var button_ajax_state_sending = false;
$('#Formid').submit(function() {
if(!button_ajax_state_sending){ //only start if false (not sending)
var data = $('#Formid').serialize();
var id = $('#id').val();
var url = 'element.php?id='+id;
$.ajax({
type: "POST",
url: "parts/do.php",
cache: true,
data: data,
beforeSend: function() {
$('#dialog').append('Loading...');
button_ajax_state_sending = true; // SET TRUE
},
success: function(data){
$("#dialog").load(url);
button_ajax_state_sending = false; // SET TRUE
}
});
return false;
});