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

これは他の要素にも当てはまりますが、これは良い例です。一部のブラウザーでカラー入力タイプを使用すると、「変更」でトリガーされますが「ぼかし」ではトリガーされず、一部のブラウザーでは「ぼかし」でトリガーされますが「変更」ではトリガーされず、一部のブラウザーでは両方でトリガーされます。

一度だけトリガーするようにする良い方法はありますか?

ここでは、主にさまざまなモバイル ブラウザーについて説明しています。

4

3 に答える 3

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 に答える
3

http://api.jquery.com/one/.one()の代わりにイベント ハンドラーを試すことができます。.on()

于 2013-02-13T03:46:42.627 に答える
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 に答える