我有一个带有许多输入框的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&#34 ;;该功能将焦点转移到" B"然后将文本保存到" B"。没有任何东西粘贴到" A"。
我当然希望将内容粘贴到" A"然后焦点转移到" B"。
有没有办法获得后一种行为?提前谢谢。
答案 0 :(得分:3)
您希望在更改焦点之前触发粘贴事件,因此您需要在调用焦点之前完成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)
});
答案 1 :(得分:1)
这是一个班轮。你只需要引入一些延迟。
$("input").on('paste', function(e) {
var $this = $(this);
setTimeout(function () {
$this
.closest('form')
.find('input')
.eq($this.index() + 1)
.focus();
}, 100);
});