Я создаю простые формы без прямой отправки, чем раньше запускал скрипт.Таким образом, классический ввод не будет отправлять форму.Однако, поскольку пользователи часто нажимают кнопку ввода для отправки формы, я создаю простое расширение для нажатия клавиши ввода, которое вызывает скрипт при нажатии кнопки.
Например, у меня есть простая форма:
<form id="testForm">
<input type="email" id="email" />
<input type="password" id="pass" />
<button id="btnLogin" type="button">Login</button>
</form>
И созданное мной расширение выглядит следующим образом:
(function($){
$.fn.noEnter=function(options){
let settings=$.extend({btn:""},options);
function _init(){
$(this).on("keypress",function(event){
if(event.keyCode === 13) {
event.preventDefault();
$("#"+settings.btn).click();
return false;
}
});
}
this.each(function(){_init();});
return{}
};
}(jQuery));
Затем в скрипте я вызываю что-то вроде этого:
$("#email").noEnter({btn:"btnLogin"});
$("#pass").noEnter({btn:"btnLogin"});
$("#btnLogin").click(function(){
.....
});
И это работает. Проблема в том, что он работает дважды для каждого поля ввода.Похоже, другое поле ввода принимает событие нажатия клавиши (или нажатия клавиши).Или я что-то упустил?