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

fre*_*ent 15 javascript jquery events jquery-mobile

我正在尝试在更改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
        })
    }               
Run Code Online (Sandbox Code Playgroud)

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

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

感谢帮助!

Roc*_*mat 27

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

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

function blurChange(e){
    clearTimeout(blurChange.timeout);
    blurChange.timeout = setTimeout(function(){
        // Your event code goes here.
    }, 100);
}

$('#my_select').on('blur change',blurChange);
Run Code Online (Sandbox Code Playgroud)