Как надежно перехватить отправку формы?

Я пытаюсь перехватить все виды отправки формы для определенной формы на веб-странице. С jQuery это выглядит очень просто: form.submit (function (e) {…}) , и он прекрасно работает, если я нажимаю кнопку «Отправить».

Однако есть также свойство onChange в поле выбора, которое выполняет this.form.submit () , и похоже, что этот вызов обходит мой слушатель (в Chromium / Firefox):

<script type="text/javascript">
    function submitForm(e) {
        window.alert('submitted');
        e.preventDefault();
        return false;
    }

    $(document).ready(function() {
        $('#bar').submit(submitForm);
    });
</script>

<form id="bar">
    <select name="name" onChange="this.form.submit()">
        <option>Foo</option>
        <option>Bar</option>
    </select>
    <br/>
    <input type="submit"/>
</form>

Очевидно, в приведенный выше код, я мог бы просто изменить this.form.submit () на конкретную ссылку моего прослушивателя отправки. Однако в моем реальном приложении это не так просто, поэтому я ищу способ, где мне не нужно изменять свойство onChange.

Если бы я не совершил глупую ошибку, но это действительно ожидаемое поведение браузера, я был бы очень рад, если бы вы могли объяснить поток событий и почему это приводит к симптомам, описанным выше.

6
задан H.B. 14 May 2014 в 17:19
поделиться