如何绑定到模糊和更改,但只在Jquery / Javascript中触发一次函数?

我正在尝试在更改select元素时触发函数。

由于Ipad在on(’change’)上遇到麻烦,我也想绑定到’blur’,这在Ipad上工作正常。

但是我不希望两个事件都触发该函数两次,所以我需要一些钩子来确保是否更改模糊触发器,底层函数只被触发一次。

这就是我现在正在做的事情,但……不是很好:

// make sure binding is only assigned once var compSel = $('#my_select'); if ( compSel.jqmData('bound') != true ){ console.log("bound"); compSel.jqmData('bound', true) .on( $.support.touch ? 'blur' : 'change', function(){ console.log("trigger"); // run function xyz }) } 

如果您可以使用所有可模糊的可触摸设备,则此function正常。

题:
有没有人有更好的想法确保模糊和更改只触发一次function?

感谢帮助!

尝试创建一个绑定到两个事件的函数,并添加一个超时来调用该函数。 这样,如果多次调用该函数,它将只运行一次。

这样的事情(你可以根据需要调整超时):

 function blurChange(e){ clearTimeout(blurChange.timeout); blurChange.timeout = setTimeout(function(){ // Your event code goes here. }, 100); } $('#my_select').on('blur change',blurChange); 

不知道ipad,但在浏览器上可能是这样的

 $("#dataTable tbody").on("click blur", "tr", function(event){ if (event.type == "click") { //do stuff } else { //do nothing } }); 

这不好,但你可以调用change blurfunction,并在changefunction中执行所有操作:

 ... $(document).on("change", "#yourelement", function(){ //do your stuff }); .... $(document).on("blur", "#yourelement", function(){ $("#yourelement").change(); //alternatively, you can trigger the change event //$("#yourelement").trigger("change"); }); 

它看起来不太好,但我认为它应该有效。

编辑:如果浏览器启动两个事件(模糊和更改),此代码将调用两次changefunction。 我认为你可以通过某种标志实现这种行为:

 var executed = false; ... $(document).on("change blur", "#yourelement", function(){ if(!executed){ executed = true; //do your stuff } }); 

附加多个事件,您也可以使用它

  

$( "#Category" ).on( "blur change", function( event ) { if($(this).val()===""){ $(this).next().text("Please choose category").css("color","#a94442"); } else { $(this).next().text(""); } });

您可以同时绑定到多个事件:

 $(document).on('blur change','#mySelector',function(){ // this is called on either });