$("input[type='color']").on("change blur", function() {
alert("changed");
});
这也适用于其他元素,但这是一个很好的例子。在某些浏览器上使用颜色输入类型时,它会在“更改”上触发,但不会在“模糊”上触发,在某些浏览器上会在“模糊”上触发,但不会在“更改”上触发,而在某些浏览器上会同时触发。
有没有好的方法来确保它只触发一次?
我这里主要讲各种手机浏览器。
$("input[type='color']").on("change blur", function() {
alert("changed");
});
这也适用于其他元素,但这是一个很好的例子。在某些浏览器上使用颜色输入类型时,它会在“更改”上触发,但不会在“模糊”上触发,在某些浏览器上会在“模糊”上触发,但不会在“更改”上触发,而在某些浏览器上会同时触发。
有没有好的方法来确保它只触发一次?
我这里主要讲各种手机浏览器。
您可以尝试使用.one()
事件处理程序而不是.on()
http://api.jquery.com/one/
我已经编写了一个专门的版本.one()
,它将在处理第一个事件后重新绑定事件处理程序。它在包装器中执行此操作,因此不必更改事件处理程序代码本身。
$.fn.one_rebind = function(events, listener) {
return this.one(events, function fn() {
var $self = $(this).unbind(events);
listener.apply(this, arguments);
setTimeout(function() {
$self.one(events, fn);
}, 0);
});
};
$('input[type=color]').one_rebind('change blur', function(evt) {
document.getElementById('debug').innerText += ' ' + evt.type;
});
虽然经过测试,但您的里程可能会有所不同:)
用这个开始你的功能:
var now = new Date().getTime();
if( arguments.callee.lastcalled > now-250) return false;
arguments.callee.lastcalled = now;
这样做是为了限制函数每 250 毫秒被调用一次以上(这通常就足够了,而不会冒丢失实际重复项的风险)