使用JQuery将焦点更改为粘贴事件后的下一个输入

Change focus on next input after paste event with JQuery

本文关键字:事件 输入 下一个 JQuery 焦点 使用      更新时间:2024-06-12

我有一个带有许多输入框的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"answers"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)
});

http://jsfiddle.net/6utcnaq3/1/

这里有一行代码。你只需要介绍一些延迟。

$("input").on('paste', function(e) {
    var $this = $(this);
    setTimeout(function () {
       $this
         .closest('form')
         .find('input')
         .eq($this.index() + 1)
         .focus();
   }, 100);    
});