是否有可能从(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事件并从中找出按下的键,但是从更改事件中找出导致它的原因会更加简单和清晰。
答案 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>