2012-10-23 83 views
1

我想檢查URL是否已輸入到textarea中。這是檢查textarea的一個功能:jQuery on(「輸入粘貼」)在粘貼後觸發兩次

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

只有一個URL是允許的,所以之後找到的URL處理器是解除綁定使用關:

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); 
    }); 

它現在用的膏只處理工作,但主要的問題仍然存在......

+0

'input'包含所有輸入方法,包括粘貼。是否有明確添加'paste'的理由? – pimvdb

+0

不,我剛剛看到「輸入粘貼」這裏http://stackoverflow.com/questions/686995/jquery-catch-paste-input –

+0

我只試過輸入,但它是一樣的 –

回答

0

我想我已經解決了這個問題。在綁定事件之前,我已經解除了元素中的所有內容。

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

請注意,'bind' /'unbind'已棄用。你最好繼續使用'on' /'off'。 – pimvdb

+0

感謝提供的信息 –

+0

不能幫助我,現在它觸發更多次:粘貼,輸入,輸入 – vladkras

1

獲取事件對象並檢查事件類型'輸入',因此如果其粘貼事件觸發輸入事件

你可以試試這個

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


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

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

+0

我非常喜歡這個解決方案。十分優雅! –