Как я могу прослушать событие отправки формы в javascript?
Я хочу написать свою собственную библиотеку javascript для проверки формы, и я искал в google, как определить, нажата ли кнопка отправки, но все, что я нашел, это код, где вы должны использовать onClick on onSubmit="function()"
в html.
Я хотел бы сделать этот javascript, так что мне не нужно прикасаться к любому html-коду, как добавление onSubmit или onClick javascript.
5 ответов:
посмотреть Дерек, который теперь должен быть принятым ответом. Он включает в себя все, что этот ответ включал и многое другое.
(Я попытался удалить этот ответ после того, как Дерек обновил его, чтобы включить примеры библиотек, но с зеленой галочкой, поэтому не позволю мне)
почему люди всегда используют jQuery, когда это не нужно?
Почему люди не могут просто использовать простой JavaScript?var ele = /*Your Form Element*/; if(ele.addEventListener){ ele.addEventListener("submit", callback, false); //Modern browsers }else if(ele.attachEvent){ ele.attachEvent('onsubmit', callback); //Old IE }
callback
- это функция, которую вы хотите вызвать, когда форма передается.о
EventTarget.addEventListener
, проверьте эта документация по MDN.отменить уроженца
submit
событие (запретить отправку формы), используйте.preventDefault()
в вашей функция обратного вызова,document.querySelector("#myForm").addEventListener("submit", function(e){ if(!isValid){ e.preventDefault(); //stop form from submitting } });
слушать
submit
событие с библиотекамиесли по какой-то причине вы решили, что библиотека необходима (вы уже используете ее или не хотите иметь дело с проблемами кросс-браузера), Вот список способов прослушивания события отправки в общих библиотеках:
jQuery
$(ele).submit(callback);
здесь
ele
является ссылкой на элемент формы, иcallback
будучи обратный вызов ссылка на функцию. ссылка<iframe width="100%" height="100%" src="http://jsfiddle.net/DerekL/wnbo1hq0/show" frameborder="0"></iframe>
AngularJS (1.x)
<form ng-submit="callback()"> $scope.callback = function(){ /*...*/ };
очень просто, где
$scope
объем предоставляемых средой внутри контроллер. ссылкареагировать
<form onSubmit={this.handleSubmit}> class YourComponent extends Component { // stuff handleSubmit(event) { // do whatever you need here // if you need to stop the submit event and // perform/dispatch your own actions event.preventDefault(); } // more stuff }
просто передайте обработчик в
onSubmit
проп. ссылкадругие фреймворки/библиотеки
обратитесь к документации вашей платформы.
проверка
вы всегда можете сделать свою проверку в JavaScript, но с HTML5 у нас также есть собственная проверка.
<!-- Must be a 5 digit number --> <input type="number" required pattern="\d{5}">
вам даже не нужен JavaScript! Всякий раз, когда собственная проверка не поддерживается, вы можете вернуться к JavaScript валидатор.
Это самый простой способ, вы можете иметь свой собственный javascript функция вызывается, когда
onSubmit
происходит.HTML
<form> <input type="text" name="name"> <input type="submit" name="submit"> </form>
JavaScript
window.onload = function() { var form = document.querySelector("form"); form.onsubmit = submitted.bind(form); } function submitted(event) { event.preventDefault(); }
на основе ваших требований вы также можете сделать следующее без библиотек, таких как jQuery:
добавьте это в свою голову:
window.onload = function () { document.getElementById("frmSubmit").onsubmit = function onSubmit(form) { var isValid = true; //validate your elems here isValid = false; if (!isValid) { alert("Please check your fields!"); return false; } else { //you are good to go return true; } } }
и твоя форма все еще может выглядеть примерно так:
<form id="frmSubmit" action="/Submit"> <input type="submit" value="Submit" /> </form>