2010-08-05 81 views
4

我必然會一些事件對左,右箭頭按鍵的情況發生,像這樣:如何阻止干擾表單域的keydown事件?

$(document).keydown(function(e) { 
    switch(e.which) { 
     case 39: $("#next").trigger('click'); 
     break; 

     case 37: $("#prev").trigger('click'); 
     break;    
    } 
}); 

但是,很明顯,如果你是在一個表格,再按左右通過文字移動,這些事件觸發。

我該如何改變這種情況,以防止發生這種情況?

+0

你到底要怎麼辦? – Sjoerd 2010-08-05 13:37:54

回答

11

你可以檢查事件(more information here

$(document).keydown(function(e) { 
    //var target = (e.target) ? e.target : e.srcElement; // IE uses srcElement 
    // jQuery seems to handle this, so e.target should be fine 

    if(e.target.nodeName != 'INPUT') { 
     switch(e.which) { 
      case 39: $("#next").trigger('click'); 
      break; 

      case 37: $("#prev").trigger('click'); 
      break;    
     } 
    } 
}); 

的目標,或者你可以防止事件的事件處理程序連接到輸入元素冒泡:

$('input').keydown(function(e) { 
    e.stopPropagation(); 
}); 

更新:

同樣,您可能想要測試​​3210的節點名稱。

下面是一個例子:http://jsfiddle.net/86CKw/1/

+0

+1優秀! – Fosco 2010-08-05 13:39:53

0
if (e.target.closest('form').length===0) { 
    // keypress did not occur inside a form. handle it. 
} 
2

這是最完美的解決方案,我可以找到:

$(document).ready(function() { 
    $(document).keypress(function() { 
    if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) || event.target.type === "text")) { 
     return; 
    } 

    // deal with the events here 
    ... 

    }); 
});