Javascript 使用JQuery将焦点更改为粘贴事件后的下一个输入
我有一个带有许多输入框的HTML表单。在我的任何一个输入框上的粘贴事件中,我想将焦点设置在下面的框上。 以下是我当前使用的代码:Javascript 使用JQuery将焦点更改为粘贴事件后的下一个输入,javascript,jquery,html,keyboard-events,jquery-events,Javascript,Jquery,Html,Keyboard Events,Jquery Events,我有一个带有许多输入框的HTML表单。在我的任何一个输入框上的粘贴事件中,我想将焦点设置在下面的框上。 以下是我当前使用的代码: $("input").bind('paste', function(e) { var inputs = $(this).closest('form').find(':input'); //alert(e.originalEvent.clipboardData.getData('Text')); inputs.eq( inputs.i
$("input").bind('paste', function(e) {
var inputs = $(this).closest('form').find(':input');
//alert(e.originalEvent.clipboardData.getData('Text'));
inputs.eq( inputs.index(this)+ 1 ).focus();
});
这段代码的作用如下。假设我有输入框“A”和“B”。我将文本粘贴到“a”中;该函数将焦点更改为“B”,然后将文本保存到“B”。“A”中没有粘贴任何内容
当然,我希望内容被粘贴到“A”,然后焦点切换到“B”
有没有办法获得后一种行为 您希望在更改焦点之前触发粘贴事件,因此需要在调用焦点之前完成
bind
回调
你应该做的是推迟你的焦点电话。您可以使用setTimeout
并延迟0毫秒-基本上,在粘贴函数结束后调用
$("input").bind('paste', function(e) {
var inputs = $(this).closest('form').find(':input');
var self = this;
setTimeout(function(){
inputs.eq( inputs.index(self)+ 1 ).focus();
}, 0)
});
这是一条单行线。你只需要引入一些延迟
$("input").on('paste', function(e) {
var $this = $(this);
setTimeout(function () {
$this
.closest('form')
.find('input')
.eq($this.index() + 1)
.focus();
}, 100);
});