jQuery on(“输入粘贴”)在粘贴后触发两次

时间:2012-10-23 07:20:54

标签: jquery paste

我想检查网址是否已输入到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;
    }
});

}

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

提前多多感谢。

修改

我已根据this更改了我的代码:

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

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

2 个答案:

答案 0 :(得分:1)

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

你可以试试这个

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


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

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

答案 1 :(得分:0)

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

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