获取关键代码/单击/触发更改事件

时间:2016-05-25 13:12:24

标签: javascript jquery onchange

是否有可能从(jquery)更改事件处理程序中找出触发更改事件的内容 - 按键或鼠标单击按键?

我的用例:我有输入[type = text]项目的动态列表,如果用户填写最后一个空项目,我为另一个项目添加新输入[type = text]。如果用户按下了tab(触发了更改事件),我想自动对焦它,但不是例如当用户点击某处时(因此更改被触发,但用户可能想要关注其他内容)。

简化示例:

https://jsfiddle.net/yxu82p1o/1/

<input type=text>
<script>
function addMore() {
  $('input').off('change.addMore');
  $('<input type=text>').insertAfter($('input').last()).on('change.addMore', addMore);
}
$('input').on('change.addMore', addMore);
</script>

PS。我可以找出解决方法,例如附加另一个keyup事件并从中找出按下的键,但是从更改事件中找出导致它的原因会更加简单和清晰。

1 个答案:

答案 0 :(得分:1)

这可能是一种选择。在keydown元素上侦听input事件,如果TAB键触发了事件且元素是input元素,则触发change事件input元素。然后关注动态添加的input元素。

function addMore() {
  $('input').off('change.addMore');
  $('<input type=text>').insertAfter($('input').last()).on('change.addMore', addMore);
}
$('input').on('change.addMore', addMore);

$('body').on('keydown', 'input', function(e){
  var keyCode = e.keyCode || e.which; 
  if (keyCode == 9 && this.tagName === "INPUT") {
    e.preventDefault();
    $(this).change();
    $(':text').last().focus();
  } 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input type=text>