【问题标题】:jQuery on("input paste") triggers twice after pastingjQuery on("input paste") 粘贴后触发两次
【发布时间】:2012-10-23 07:20:53
【问题描述】:

我想检查 URL 是否已输入到 textarea 中。这是一个检查 textarea 的函数:

$('#text textarea').on('input paste', function() {
            checkUrl($(this));
        });

只允许一个 URL,所以在找到 URL 处理程序后使用 off 解除绑定:

function checkUrl(elem) {

var words = elem.val().split(/\s+/);
$.each(words, function(index, element) {
    if (isValidURL($.trim(element))) {          
        $.ajax({...}); // Ajax call
        elem.off('input paste');
        return;
    }
});

}

在粘贴 URL (CTRT+V) 后,函数 checkUrl 不仅被调用一次,而且被调用两次。 Ajax 也被触发了两次。

非常感谢。

编辑

我根据this修改了我的代码:

$('#text textarea').bind('paste', function() {
        var _this = $(this);
        setTimeout( function() {
            checkUrl(_this);
        }, 100);
    });

现在只能使用粘贴处理程序,但主要问题仍然存在...

【问题讨论】:

  • input 包括所有输入方法,包括粘贴。是否有明确添加paste 的理由?
  • 不,我刚刚在这里看到了“输入粘贴”stackoverflow.com/questions/686995/jquery-catch-paste-input
  • 我试过只输入,但还是一样
  • "CTRL" 和 "V" 可能会导致问题...
  • 请粘贴您的 HTML 代码,或创建一个 JSFiddle 来复制您的问题。它会帮助我们为您提供帮助。

标签: jquery paste


【解决方案1】:

获取事件对象并检查事件类型'input',如果它是一个粘贴事件,它将触发输入事件

你可以试试这个

$('#text textarea').on('input paste',function(event){


    if(event.type=='input'){
       checkUrl($(this));
    }
 });​

演示:http://jsfiddle.net/nLPrG/

【讨论】:

  • 我真的很喜欢这个解决方案。非常优雅!
【解决方案2】:

我想我已经解决了这个问题。在绑定事件之前,我已经解除了元素中的所有内容。

$('#text textarea').unbind();   
$('#text textarea').bind('paste', function() {
        var _this = $(this);
        setTimeout( function() {
            checkUrl(_this);
    }, 100);
})

【讨论】:

  • 请注意,bind/unbind 已弃用。你最好继续使用on/off
  • 对我没有帮助,现在它会触发更多次:粘贴、输入、输入
猜你喜欢
  • 2011-07-30
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2017-05-28
  • 2015-09-29
相关资源
最近更新 更多