2015-10-07 65 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