Javascript 避免使用ajax进行多个绑定
在“模式”面板中选择“框更改”。我触发了一个ajax请求,并根据响应加载模式面板数据 我看到最初只有一个请求在第一次尝试时被触发。但随着使用select选项的次数的增加,它会不断增加 下面是我的剧本Javascript 避免使用ajax进行多个绑定,javascript,jquery,Javascript,Jquery,在“模式”面板中选择“框更改”。我触发了一个ajax请求,并根据响应加载模式面板数据 我看到最初只有一个请求在第一次尝试时被触发。但随着使用select选项的次数的增加,它会不断增加 下面是我的剧本 $(".dds").msDropDown(); $('#dropdown').off('change'); $('#dropdown').on('change', takeAction); function takeAction(event){ event.preventDefault(); va
$(".dds").msDropDown();
$('#dropdown').off('change');
$('#dropdown').on('change', takeAction);
function takeAction(event){
event.preventDefault();
var colour = $('#colors .selected').attr('data-color');
console.log(colour);
new Ajaxinator().jsonPost({
url :$(event.currentTarget).val(),
data : {
name : $(event.currentTarget).attr('title'),
colour : colour
},
success: function (response)
{
$('#dropdown').off('change');
$('#Data').html(response.Data);
$('#dropdown').off('change',takeAction);
}
});
};
我认为这是因为新绑定为dropdown创建的每个ajax请求以及onchange函数都会多次调用。有人能帮我吗。你能试试这个吗
var oAJAXRequest = false; //GLOBAL VARIABLE
$("#dropdown").unbind('change');
$("#dropdown").bind('change', takeAction);
function takeAction(){
if(oAJAXRequest != false){
return;
}
event.preventDefault();
var colour = $('#colors .selected').attr('data-color');
oAJAXRequest = $.ajax({
type: 'POST',
url: $(event.currentTarget).val(),
data : {
name : $(event.currentTarget).attr('title'),
colour : colour
},
success: function(data) {
$('#Data').html(response.Data);
oAJAXRequest = false;
},
error: function(jqXHR, sMessage, oException) {
oAJAXRequest = false;
}
});
}
我曾经
$('#dropdown').off('change',takeAction);
为我工作。我不确定我是否了解问题所在。。。您当前的代码告诉浏览器,每当下拉列表更改(即选择新选项)时,都要调用takeAction函数。这不是你想要的吗?或者还有其他问题吗?但是这些函数调用了多次。最初,当我更改下拉列表时,它只调用了一次,这很好。当我再次更改下拉列表时,这个函数调用了两次。并且它一直在增加。嗯,从我看到的情况来看,这不应该发生。。。也许问题出在HTML或Javascript的另一部分?还有,什么是.msDropDown?这是自定义下拉列表吗?也许问题就在于此。我在模式面板中有一个模式面板,我有一个下拉菜单,它是用dd插件设计的。当我选择下拉菜单时,它将生成一个ajax请求,并用响应中的数据重新绘制面板。上面的脚本将是响应数据的一部分。这也将与每个请求绑定。啊,尝试将成功函数更改为:success:function response{$'dropdown'。off'change';$'data'。htmlresponse.data;$'dropdown'。on'change',takeAction;}我将oAJAXRequest更改为true。然后我只处理第一个下拉列表更改。从下一次我将下拉列表更改为其他值时,它只是调用return。请使用问题的编辑链接添加其他信息。“发布答案”按钮只能用于完整回答问题。djot,我想回答我的问题,我在回答部分回答了