檢測

2011-07-28 39 views
2

我在幾個div的HTML表單蔓延。我需要在用戶按下時,他們每個格中的第一個或最後一個元素上的Tab鍵就知道(這樣我就可以應用某些自定義選項卡功能)。對於div中的第一個元素,我正在尋找Tab + Shift;我只查找Tab的最後一個元素。元素可以是文本框,textareas,單選按鈕,選擇列表或複選框。檢測

什麼是檢測第一和最後一個元素的最有效方法是什麼?很高興使用jQuery解決方案。

謝謝。

+0

如果你正在試圖做的一切都是向後/向前移動焦點到正確的輸入,你爲什麼不使用'的TabIndex '屬性而不是JS? –

回答

0

只要輸入真正的DIV的第一和最後一個孩子,下面將工作。否則,你需要對選擇有點棘手。

編輯:我對孩子爲了斷言似乎是不正確的。這應該適用於大多數情況。 末編輯

如果你希望它是具體到某些類型的輸入,或者被認爲是輸入,但並不是真正的input元素的東西,選擇將需要一些小的調整。

演示

http://jsfiddle.net/JAAulde/tHkdz/

代碼

$('#myform') 
    .find('div input:first-child, div input:last-child') 
    .bind('keydown', function(e) 
    { 
     if(e.which === 9) 
     { 
      //custom code here 
      e.preventDefault(); 
     } 
    }); 
+0

太好了 - 謝謝。 – Journeyman

+0

所以你想爲第一個和最後一個輸入使用相同的事件處理程序?看起來你只想在第一個輸入上處理SHIFT + TAB,並讓默認行爲接管TAB鍵。 – FishBasketGordo

0

你可以使用第一和最後一個子選擇:

var first = $("#form-name:first-child"); 
var last = $("#form-name:last-child"); 
2

您可以使用:first-child:last-child選擇找到表單元素。然後,就可以把​​事件處理程序,並分別檢查SHIFT + TAB和TAB。

$('div input:first-child').keydown(function(event) { 
    if (event.which == 9 && event.shiftKey) { // Tab is keycode 9 
     // Do custom tab handling 
    } 
}); 

$('div input:last-child').keydown(function(event) { 
    if (event.which == 9) { 
     // Do custom tab handling 
    } 
}); 
+0

那些不起作用。他們會在所有div中查找所有輸入,並僅返回總集合中的第一個或總集合中的最後一個。不是每個div的第一個和最後一個。 – JAAulde

+0

哎呀。你是對的。我糾正了我的錯字。 – FishBasketGordo

0

聽起來像是你想擁有第一和最後一個元素上的卡包。

  • 獲取第一:$('#form').find('input, textarea, select').first();
  • 獲得最後:$('#form').find('input, textarea, select').first();
  • 綁定的keydown的元素:.keydown()

編輯:選擇邏輯是錯誤的

如:http://jsfiddle.net/rkw79/fuXyf/