2011-03-23 20 views
3

只是一個簡單的問題,我似乎做了很多:jQuery的事件綁定 - 點擊和按鍵

$saveBtn.bind("click keypress", function(e) 
{ 
    if (e.type != "keypress" || e.keyCode == 13) 
    { 
     // Do something... 

     return false; 
    } 
}); 

是否有一個「動作」監聽器綁定到一個按鈕一個更快的方法?我希望始終確保帶有事件偵聽器的按鈕在點擊和回車鍵上觸發......這好像是一件相當普通的事情,但在谷歌上找不到任何東西。有什麼想法嗎?

謝謝。

回答

3

通過綁定它與click將做的工作,不需要保持按下。 Example

+0

我沒有意識到這一點,也沒有想到嘗試......非常感謝! – 2011-03-24 08:43:00

+1

這實際上只適用於具有本機鍵盤支持的元素,如A標籤和Button標籤以及whatnot - 例如,這不適用於div標籤。 – 2012-07-24 21:40:24

0

如果它是表單的一部分,您可以只聽「提交」事件?

+0

是的,在上面的例子中是這樣的,儘管這個表單有多個提交按鈕,但所有這些按鈕的行爲都略有不同(如果用戶啓用了JS)。但我仍然在尋找更一般的解決方案。 – 2011-03-23 16:58:40

1

你可以創建它處理額外的邏輯第二功能,並通過你的函數作爲參數:

function handleClickAndPress(myfunc) 
{ 
    return function (e) { 
     if (e.type != "keypress" || e.keyCode == 13) { 
      myfunc(e); 
     } 
    }; 
} 

$saveBtn.bind("click keypress", handleClickAndPress(function (e) { 
    // do your stuff here 
})); 
0

單擊事件實際上並沒有處理按鍵在任何情況下,它是按鈕使點擊事件起作用。當您使用具有tabindex屬性的div來使其鍵盤可訪問時,當您按Enter鍵時,點擊處理程序不會觸發。

HTML

<div id="click-only" tabindex="0">Submit click only</div> 
<div id="click-and-press" tabindex="0">Submit click and press</div>​ 

jQuery的

$("#click-only").click(function (e) { 
    addToBody(); // Only works on click 
}); 

$("#click-and-press").bind("click keypress", handleClickAndPress(function (e) { 
    addToBody(); // Works on click and keypress 
})); 

function addToBody() { 
    $("body").append($("<p/>").text("Submitted")); 
} 

function handleClickAndPress(myfunc) { 
    return function (e) { 
     if (e.type != "keypress" || e.keyCode == 13) { 
      myfunc(e); 
     } 
    }; 
} 

因此,要回答這個問題,我不認爲還有比yoda2k的解決方案其他更好的方式(即在任何情況下工作)。