web-dev-qa-db-ja.com

Javascript select onchange = 'this.form.submit()'

選択といくつかのテキスト入力を持つフォームがあります。選択が変更されたときにフォームを送信したいのですが。これは、次を使用して正常に機能します。

_onchange="this.form.submit()"
_

ただし、フォームに送信ボタンも含まれている場合、選択が変更されてもフォームは送信されません。ある種の対立を推測しています。

ここで私のオプションは何ですか?

代わりに$(this.form).trigger("submit")のようなものを使用すべきですか?

30
JonoB

次のようなものを使用できるはずです。

$('#selectElementId').change(
    function(){
         $(this).closest('form').trigger('submit');
         /* or:
         $('#formElementId').trigger('submit');
            or:
         $('#formElementId').submit();
         */
    });
54
David Thomas

私のサイキックデバッグスキルは、送信ボタンの名前がsubmitであることを教えてくれます。
したがって、form.submitは、メソッドではなくボタンを指します。

ボタンの名前を別の名前に変更して、form.submitは再びメソッドを参照します。

25
SLaks

JQueryを使用している場合、次のように簡単です。

 $('#mySelect').change(function()
 {
     $('#myForm').submit();
 });
10
Tejs

これを完了するにはいくつかの方法があります。

要素はどのフォームに属しているかを知っているので、jqueryでthisをラップする必要はなく、フォーム要素を返す_this.form_を呼び出すだけです。次に、フォーム要素でsubmit()を呼び出して送信できます。

_  $('select').on('change', function(e){
    this.form.submit()
  });
_

ドキュメント: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

5
Blair Anderson

つかいます :

<select onchange="myFunction()">

    function myFunction() {
        document.querySelectorAll("input[type=submit]")[0].click();
    }
0
Wasif Shahjahan

JQueryを使用してそれらをバインドし、jQueryで処理します: http://jsfiddle.net/ZmxpW/

$('select').change(function() {
    $(this).parents('form').submit();
});
0
pimvdb