2013-07-01 58 views
0

有沒有辦法如何只處理這些事件之一,如果他們都開除了?如果我改變了數值並按下鍵,我最終重新綁定網格兩次,因爲事件按順序到達。我明白我得到的是正確的行爲,我得到了我所要求的,但我需要一種方法來阻止第二個事件的傳播。我在事件級別尋找解決方案(不是isGridBinded標誌)。過濾器「的onchange」「onkeypress事件」

 $(op.$txtBox).on('change keypress', function (e) { 
      if ((e.keyCode == 13 && e.type == 'keypress') || e.type == 'change') { 
       localWidget._rebindGrid(); 
      } 
     }); 
+0

http://stackoverflow.com/questions/2363360/javascript-fires-two-events -onkeypress-and-on-click類似的問題 - 沒有答案。 – Vojtiik

+0

你可以提供一個jsfiddle的相關代碼?! –

+0

@BrokenHeartღ你的鏈接是相對的代表團,在這裏OP不委託 –

回答

1

改爲使用keyup事件。

否則,我能想到的唯一辦法就是使用超時阻止它:

DEMO

(function() { 
    var timeout; 
    $('input').on('change keypress', function (e) { 
     clearTimeout(timeout); 
     timeout = setTimeout(function() { 
      if ((e.keyCode == 13 && e.type == 'keypress') || e.type == 'change') { 
       console.log(1); 
      } 
     }, 0); 
    }); 
})(); 
+0

非常感謝keyup做的竅門,超時解決方案也會讓我解決這個問題。有趣的是,這兩個事件的行爲不同,我會閱讀它一點點 – Vojtiik

+0

進一步這裏是最好的解決方案:http://stackoverflow.com/questions/8608145/jquery-on-method-with-multiple-event-handlers一對一選擇器 - http://api.jquery.com/on/#on-events-selector-data – Vojtiik

0

使用類似的事件:

$(op.$txtBox).on({ 
    change: function(){ 
      localWidget._rebindGrid(); 
    }, 
    keypress: function(e){ 
     if(e.keyCode == 13) 
      localWidget._rebindGrid(); 
    }, 
}); 

參考: JQuery .on() method with multiple event handlers to one selector

或者你可以使用jQuery的bind()功能。

+0

這會改變爲OP的問題? –

+0

@roasted我正在更新代碼。 –

+0

@打開它的工作嘗試與警報更改console.log。 –