2011-11-19 54 views
0

我有一個包含許多文本輸入的頁面。由於許多原因,所有輸入共享同一個類。捕獲同一類輸入上的鍵碼

現在我試圖捕獲一個ESC按鈕,當一個輸入被關注時,如果輸入有價值或者沒有輸入,就會發出警報。

現在這個邏輯上只適用於第一個字段。在第一個字段之後,由於所有輸入共享同一個類,當我按下ESC按鈕時,它會給出第一個輸入的值。

所以我怎麼說我說的是第二,第五或任何輸入我按ESC上。

下面是一個例子:http://jsfiddle.net/Y5e9W/

第一輸入工作正常,第二輸入思想;當你按下ESC時,它會給你第一個值。

回答

3

您應該能夠將keyup事件綁定到您的班級的元素,而不是document。然後this將參照元素與重點:

$(".gp").keyup(function(e) { 
    if(e.which === 27) { 
     if(this.value.length > 0) { 
      //Has a value! 
     } 
     else { 
      //Empty! 
     } 
    } 
}); 

這裏是一個updated fiddle。請注意,我使用了事件對象的which屬性,該屬性jQuery公開處理keyCodecharCode之間的瀏覽器差異。根據意見

更新

如果確實需要在document一級處理這個問題,你可以使用has方法您.gp元素的選擇縮小到具有焦點的一個:

if (gj.has(":focus").val() != 0) { //... 

這是another fiddle

+0

這是不可能被包裝在文檔密碼?這是一個完整的Web應用程序,其中包含很多文檔密鑰。 – jQuerybeast

+0

它應該是可能的,但可能不如將事件處理程序綁定到元素本身那樣高效。看看我的編輯(假設我已經明白你需要什麼...) –

+0

好吧,發現我的實際問題:http://jsfiddle.net/kjCs3/我的輸入附加了一個自動完成。 jquery自動完成給自己的鍵碼,從而使keybind不能正常工作。看看小提琴 – jQuerybeast

0

你可以這樣做 -

​​

這隻會與「GP」級的keyup事件元素的反應,然後你可以使用this訪問相關的元素。

演示 - http://jsfiddle.net/uqS72/2/

+0

這是不可能在文檔密鑰? – jQuerybeast