6

Webページ上の特定のフォームに対するあらゆる種類のフォーム送信を傍受しようとしています。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プロパティを変更する必要がない方法を探しています。

ばかげた間違いをしなかったが、これは実際に予想されるブラウザの動作である場合、イベントフローと、これが上記の症状につながる理由を説明していただければ幸いです。

4

1 に答える 1

10

form.submit()メソッドを呼び出してもsubmitイベントはトリガーされません。たとえばvalue、テキスト ボックスの を設定してもchangeイベントはトリガーされません。submit代わりに jQuery を介してイベントをトリガーしてみてください。

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

ドキュメントによると、フォームのデフォルトsubmitアクションが実行され、フォームが送信されます。

于 2010-10-18T09:08:20.920 に答える