Как я могу прослушать событие отправки формы в javascript?


Я хочу написать свою собственную библиотеку javascript для проверки формы, и я искал в google, как определить, нажата ли кнопка отправки, но все, что я нашел, это код, где вы должны использовать onClick on onSubmit="function()" в html.

Я хотел бы сделать этот javascript, так что мне не нужно прикасаться к любому html-коду, как добавление onSubmit или onClick javascript.

5 88

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 событие с библиотеками

если по какой-то причине вы решили, что библиотека необходима (вы уже используете ее или не хотите иметь дело с проблемами кросс-браузера), Вот список способов прослушивания события отправки в общих библиотеках:

  1. jQuery

    $(ele).submit(callback);
    

    здесь ele является ссылкой на элемент формы, и callback будучи обратный вызов ссылка на функцию. ссылка

    <iframe width="100%" height="100%" src="http://jsfiddle.net/DerekL/wnbo1hq0/show" frameborder="0"></iframe>
  1. AngularJS (1.x)

    <form ng-submit="callback()">
    
    $scope.callback = function(){ /*...*/ };
    

    очень просто, где $scope объем предоставляемых средой внутри контроллер. ссылка

  2. реагировать

    <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 проп. ссылка

  3. другие фреймворки/библиотеки

    обратитесь к документации вашей платформы.


проверка

вы всегда можете сделать свою проверку в JavaScript, но с HTML5 у нас также есть собственная проверка.

<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">

вам даже не нужен JavaScript! Всякий раз, когда собственная проверка не поддерживается, вы можете вернуться к JavaScript валидатор.

Demo:http://jsfiddle.net/DerekL/L23wmo1L/

Это самый простой способ, вы можете иметь свой собственный 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>

С помощью jQuery:

$('form').submit(function () {
    // Validate here

    if (pass)
        return true;
    else
        return false;
});