2013-10-15 129 views
1

在模态面板中的选择框更改。我正在发射ajax请求,并根据响应加载模态面板数据。避免多个绑定ajax

我看到最初只有一个请求是第一次尝试射击。但随着选择选项的次数不断增加。下面

是我的脚本

$(".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); 

} 
}); 

}; 

我想,这是因为每一个Ajax请求新的绑定是创造#dropdown电平变化和功能调用多次。谁能帮我吗。

+0

不知道我明白问题是什么......您当前的代码告诉浏览器每次下拉更改(即选择新选项)时调用'takeAction()'函数。这不是你想要的吗?还是有另一个问题? –

+0

但这些功能是多次调用..最初,当我改变下拉它只调用一次,这是很好..当我再次改变下拉这个函数调用两次..并继续增加 – sree

+0

嗯,从我可以看,这不应该发生......也许问题出在HTML或Javascript的另一部分?另外,什么是.msDropDown()?这是一个自定义下拉?也许问题出在那。 –

回答

0

你可以试试这个吗?

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; 
     } 
    }); 
} 
+0

我将oAJAXRequest更改为true.then我只为第一个下拉式变化工作......当我将下拉菜单更改为其他值时,它只是调用返回 – sree

0

我用

$('#dropdown').off('change',takeAction); 

为我工作。

+0

请使用您问题上的编辑链接添加其他信息。后回答按钮应该只用于问题的完整答案。 – djot

+0

djot,我想回答我的问题,并在回答部分回答 – sree