2013-08-20 2 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

Я проверил это на Galaxy 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 Конечно, но трудно поверить, что кто-то будет вставлять всю электронную почту/пароль буквами только для того, чтобы избежать защиты «вставить». Делать это гораздо сложнее и громоздко, чем печатать, так что в чем смысл? Однако, если у вас действительно есть поля ввода, в которых вы ожидаете только одну букву, просто выполните это: если было отправлено событие 'input', но не было отправлено событие' keydown', мы можем классифицировать его как 'paste'. –

+0

Достаточно справедливо, я отмечу это как ответ. – CalebC