1
$("input[type='color']").on("change blur", function() {
    alert("changed");
});

这也适用于其他元素,但这是一个很好的例子。在某些浏览器上使用颜色输入类型时,它会在“更改”上触发,但不会在“模糊”上触发,在某些浏览器上会在“模糊”上触发,但不会在“更改”上触发,而在某些浏览器上会同时触发。

有没有好的方法来确保它只触发一次?

我这里主要讲各种手机浏览器。

4

3 回答 3

3

您可以尝试使用.one()事件处理程序而不是.on() http://api.jquery.com/one/

于 2013-02-13T03:46:42.627 回答
3

我已经编写了一个专门的版本.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;
});

虽然经过测试,但您的里程可能会有所不同:)

演示

于 2013-02-13T04:44:41.057 回答
0

用这个开始你的功能:

var now = new Date().getTime();
if( arguments.callee.lastcalled > now-250) return false;
arguments.callee.lastcalled = now;

这样做是为了限制函数每 250 毫秒被调用一次以上(这通常就足够了,而不会冒丢失实际重复项的风险)

于 2013-02-13T03:46:53.813 回答