如何绑定到模糊和更改,但只在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
blur
function,并在change
function中执行所有操作:
... $(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"); });
它看起来不太好,但我认为它应该有效。
编辑:如果浏览器启动两个事件(模糊和更改),此代码将调用两次change
function。 我认为你可以通过某种标志实现这种行为:
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 });