我有一个带有许多输入框的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毫秒-基本上,调用after您的粘贴函数结束。
$("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);
});