2013-08-20 92 views
5

我有一個輸入字段,我不希望用戶粘貼任何值。我使用下面的jQuery代碼,它在桌面瀏覽器和iPhone Safari上運行良好。問題是它不適用於Android瀏覽器。如何在Android瀏覽器中使用JQuery禁用「粘貼」?

$('#no_paste').bind("paste", function(e) {     
     e.preventDefault(); 
}); 

這裏的fiddle

+0

我知道它與問題無關,但爲什麼禁用粘貼? –

+0

那麼,不應該粘貼電子郵件確認,密碼確認等輸入字段。 – CalebC

+1

我不確定我是否同意這一點。一些值得思考的食物:[防止用戶從剪貼板粘貼到強制性表單域](http://ux.stackexchange.com/q/21062/4487),[我應該讓用戶複製/粘貼到確認(http://ux.stackexchange.com/q/1488/4487) –

回答

1

我測試過這個銀河SIII和Android瀏覽器似乎不發送 paste事件。但是,在粘貼內容後它仍會發送input事件。

如果用戶正在輸入字段,他將針對每個字母觸發一個input事件。但是,如果他正在粘貼,則input事件將僅爲粘貼的整個字符串觸發一次。在此基礎上觀察,我們可以阻止粘貼這樣的:

$('#ie').bind("input", function() { 
    var previousValue = $(this).data('old_value') || '', 
     newValue = $(this).val(); 

    if((newValue.length - previousValue.length) > 1) { 
     $(this).val(previousValue); 
    } 

    $(this).data('old_value', $(this).val()); 
}); 

你會發現的jsfiddle here

請注意,這也將阻止自動完成和所有其他奇怪的輸入技術以類似的方式工作(我不知道任何)。

+0

好的破解!但是,如果用戶粘貼單個字符,它仍然可以工作。 – CalebC

+0

@CalebC當然,但很難相信有人會通過信件粘貼整個電子郵件/密碼來避免「粘貼」保護。這樣做比打字複雜繁瑣,所以有什麼意義?然而,如果你真的有輸入字段,你只需要一個字母,那就簡單地做到這一點:如果發送了'輸入'事件,但在它之前沒有發送'keydown'事件,我們可以將它分類爲'paste'。 –

+0

夠公平的,我會將其標記爲答案。 – CalebC

相關問題