使用 JQuery 粘贴事件后将焦点更改为下一个输入
Change focus on next input after paste event with JQuery
我有一个包含许多输入框的 HTML 表单。在我的任何输入框上的粘贴事件中,我想将焦点设置在以下输入框上。
这是我目前使用的代码:
$("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);
});
我有一个包含许多输入框的 HTML 表单。在我的任何输入框上的粘贴事件中,我想将焦点设置在以下输入框上。 这是我目前使用的代码:
$("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);
});