2012-11-29 45 views
0

我有一個問題,我有一個文本框驗證,以防止用戶輸入數據超過10個字符,我已應用驗證keyprees,但我不能以限制用戶粘貼長度超過10的數據。 我已經搜索並嘗試粘貼事件,但它不工作,它不限制用戶粘貼值,preventDefault();不管用。如何在jQuery中使用preventDefault()粘貼事件

代碼 -

$('#EMName').bind('paste', function (e) { 
     var self = $(this); 
     var v = false; 
     var flag = setTimeout(function() { 

      var len = $(self).val().length; 
      if (len > 10) { 
       alert("false"); 
       v = false; 
       return false 
      } 
      else { 
       alert("true"); 
       v = true; 
       return true; 
      } 

     }, 0); 
     if (v == false) 
      e.preventDefault(); 
}); 
+0

bind('paste')不是按鍵。這是crtl + v [jsfiddle](http://jsfiddle.net/6kgcE/8/) –

+0

這很難以crossbrowser的方式做到這一點 –

回答

1

這是我們與我們的應用經驗以及存在的問題。它不僅僅是粘貼文本,它還是各種瀏覽器插件,它們將預先填寫您的字段或存儲在瀏覽器本身中的表單數據,這些數據不會觸發任何事件。

我們能夠克服這個問題的唯一方法是使用setInterval()進行定期檢查,所以我們沒有錯過這些事件。

1

好吧,所以你實際上不會允許用戶粘貼。如果你不這樣做將工作

<input id="EMName" value="" onpaste="return false" maxlength="10" /> 
0

本質上,你想監視儘可能多的事件,你可以爲該輸入,允許值被改變。我用我的網站的一個類似的東西,這是我做的:

$(document).ready(function(){ 
    $('#target').on('propertychange keyup input paste', function(){ 
     var target = $(this); 
     var text = target.val(); 
     if (text.length > 10) { 
      target.val(text.substring(0, 9)); 
     } 
    }); 
});​ 

Demo

這適用於打字,CTRL + V,用鼠標右鍵單擊粘貼和大多數其他的事情。我不確定它是否會工作,如果一個瀏覽器插件填充它。

+0

一個問題 - 如果你確定它的工作原理,你試過嗎?我們做了,填寫表格的插件根本沒有觸發任何事件 –

+0

有一個演示鏈接供您試用。就像我在我的回答中所說的:這適用於打字,ctrl + v,右鍵單擊粘貼和其他大部分內容。我不確定它是否會工作,如果一個瀏覽器插件填充它。 – xbonez

+0

哈哈,Sry男人,我讀了「我確定它會工作,如果瀏覽器插件...」......道歉 –