2015-10-07 67 views
0

我正在嘗試改變html表單中選擇的行爲。捕獲TAB keydown並觸發其他按鍵

我想的是,當用戶使用鍵盤,如果他選擇的元素並按壓導航選項卡的形式中,所述元件被選擇並且焦點切換到下一個形式輸入。通常情況下,您需要按Enter鍵選擇元素,然後您可以使用選項卡切換到下一個。如果沒有按下輸入,則不會選擇任何選項。

要做到這一點,我想要捕獲TAB按鍵,並觸發一個ENTER鍵和一個TAB鍵。

這是我現在:

 $('form[class="ui form"]').on('keydown', 'div[class="ui fluid selection dropdown active visible"]', function (e) { 
     var keyCode = e.keyCode || e.which; 

     if (keyCode == 9) { 
      e.preventDefault(); 
      var y = jQuery.Event('keydown', {which: 13}); 
      $(this).trigger(y); 
      var x = jQuery.Event('keydown', {which: 9}); 
      $(this).trigger(x); 
     } 
    }); 

這裏是一個演示:JSFiddle

代碼「作品」高達e.preventDefault(),標籤按鍵不切換專注於下一個輸入。但是,輸入和製表符操作沒有被觸發,所以沒有任何反應。我該怎麼辦 ? 提前謝謝!

UPDATE 10/10:發現問題!觸發事件x(製表鍵)使代碼進入無限循環。所以整個方法是錯誤的。我會很快發佈答案。

+0

會發生什麼事,如果你更換'和'keyCode' which'? – BenM

+0

@BenM沒有任何變化 – Ire

+0

您是否嘗試觸發按鍵? –

回答

0

在提問法草案引發無限循環。問題的關鍵在於當用戶按TAB並將焦點切換到下一個元素時捕獲所選(活動)元素。

所以,最好是使用一種名爲onblur功能:

$('form[class="ui form"]').on('blur', '.dropdown', function() { 
     var y = jQuery.Event('keydown', {which: 13}); 
     $(this).trigger(y); 
    }); 
0

當我試圖把它傳遞which作爲事件對象,它的工作jsfiddle.net/mendesjuan/sL7tnfm6/5

$('form[class="ui form"]').on('keydown', 'div[class="ui fluid selection dropdown active visible"]', function (e) { 
     var keyCode = e.keyCode || e.which; 

     if (keyCode == 9) { 
      e.preventDefault(); 
      var y = jQuery.Event('keydown', {which: 13}); 
      $(this).trigger(y); 

     } 
    }); 
+0

這部分不工作,但它並沒有解決問題:焦點停留在當前下拉轉而關注下一表單元素 – Ire