2015-06-19 3 views
2

Входной элемент на веб-странице определяется как следующее, чтобы предотвратить пароли, вставленные в:Как заменить функцию onpaste в javascript?

<input type="password" class="field" id="password" name="password" title="Enter your password" maxlength="50" onpaste="javascript:return false;" size="38" tabindex="2"> 

Я хочу, чтобы включить вставляя в этом поле ввода. Использование Firebug или эквивалента я могу редактировать onpaste функции так, код:

onpaste="javascript:return true;" 

Это хорошо для меня, но и для других пользователей, я хочу более простое решение. Пришло в голову, что если бы я мог дать им Javascript, они могли бы открыть консоль и вставить простой однострочный. Однако, когда я пытался это сделать, Javascript не имел никакого эффекта. Я попробовал следующее и не работал.

$('#password').onpaste="" 
$('#password').onpaste="javascript:return true;" 

Что я делаю неправильно?

+0

$ ('# password'). On ('paste', function (e) {return true;}); – loli

+0

Я предполагаю, что ваш '' 'jQuery; пожалуйста, исправьте теги, если это неверно. – apsillers

+1

Я что-то пропустил? Почему вы не можете просто * не * поместить атрибут onpaste? – Anonymous

ответ

2

Проблема заключается в том, что вы пытаетесь сочетать JQuery с регулярным JavaScript. Вы можете просто использовать чистый JavaScript для удаления прослушивателя onpaste.

document.getElementById('password').onpaste="" 

Если вы хотите использовать JQuery вместо этого, вы можете использовать:

$('#password')[0].onpaste="" 

, который дал бы тот же результат.

+0

Да, вот и все! Это работает отлично. – Phil

+0

Теперь извините мое невежество, что не так с смешиванием jQuery и Javascript? Конечно, jQuery просто получает элемент «пароль», а затем мы можем использовать обычный Javascript для элемента? – Phil

+1

jQuery возвращает свой собственный объект, который хранит ссылку на элемент. Вам нужен сам элемент. Объект jQuery имеет определенные свойства, связанные с ним, но onpaste не является одним из них. – Anonymous

1
$('#password').onpaste="" 
$('#password').onpaste="javascript:return true;" 

Недействительные функции. Для стрельбы события, которое происходит от пасты, вы должны написать функцию, как этого

$('#password').bind("paste", function(e) { 
    callback(); 
}); 

Но решение для Вашего вопроса здесь http://jsfiddle.net/9et20v36/, в click функции от кнопки allow, я удалить onclick атрибут из ввода, который позволяет вставлять текст.

Так что для чистого JavaScript используют

document.getElementById('password').removeAttribute('onpaste'); 

или JQuery путь

$('#password').prop('onpaste', null); 
+0

Хорошо, как простое решение, как я могу просто очистить функцию onpaste?Действительно ли это: $ ('# password'). Bind ("paste", null)? – Phil

+0

@Phil Что вы подразумеваете под понятием «clear»? Функция, которая ничего не делает или препятствует пузырению события вверх ...? –

+0

То, что я подразумевал под понятием, было удаление всех связанных функций вставки – Phil

2

Просто удалите атрибут DOM elementonpaste, а не из jQuery object, который не имеет onpaste свойство. Ваш код создает свойство (установленное в строку), которое просто игнорируется.

В приведенном ниже примере вы можете нажать кнопку, и вставка будет снова включена.

document.querySelector('button').addEventListener('click', function() { 
 
    document.getElementById('password').removeAttribute('onpaste'); 
 
})
<input type="password" class="field" id="password" name="password" title="Enter your password" maxlength="50" onpaste="javascript:return false;" size="38" tabindex="2"> 
 

 
<button>Allow pasting</button>

+0

Хорошее решение. Благодарю. – Phil

Смежные вопросы