在使用JQuery进行粘贴事件后,将重点放在下一个输入上

问题描述 投票:2回答:2

我有一个带有许多输入框的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”。

是否有一种方法可以获取后一种行为?

javascript jquery html keyboard-events jquery-events
2个回答
3
投票

您希望在更改焦点之前触发粘贴事件,因此需要在调用焦点之前完成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)
});

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


1
投票

这里是一个班轮。您只需要引入一些延迟即可。

$("input").on('paste', function(e) {
    var $this = $(this);

    setTimeout(function () {
       $this
         .closest('form')
         .find('input')
         .eq($this.index() + 1)
         .focus();
   }, 100);    
});
© www.soinside.com 2019 - 2024. All rights reserved.