2011-08-31 16 views
30

Mam formularz z wyboru i kilka wprowadzeń tekstowych. Chciałbym, aby formularz został złożony po zmianie wyboru. To działa prawidłowo przy użyciu następujących:JavaScript wybierz onchange = 'this.form.submit()'

onchange="this.form.submit()" 

Jednakże, jeśli formularz zawiera także przycisk Prześlij, a następnie formularz nie przedstawienia, gdy select jest zmieniana. Zgaduję jakiś rodzaj konfliktu.

Jakie są moje opcje?

Czy zamiast tego powinienem użyć czegoś takiego jak $(this.form).trigger("submit") ?

+0

Podaj testcase który wykazuje problem, tak, że możemy odpowiedzieć bez dziki zgadywania –

+6

Upewnij się, że przycisk nie ma nazwy lub atrybut "przesłać", widziałem to jako przeszkadzające wcześniej. – GBa

+0

http://stackoverflow.com/questions/6736341/why-is-form-submit-not-working – SLaks

Odpowiedz

49

Powinieneś móc używać coś podobnego do:

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

Jeśli używasz jQuery, jest to tak proste, jak to:

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

moich psychicznych umiejętności debugowania powiedzieć, że swoje przedstawienia Przycisk ma nazwę submit.
Dlatego form.submit odnosi się do przycisku, a nie do metody.

Zmień nazwę przycisku na coś innego, aby form.submit odnosiła się do metody ponownie.

+3

Skąd to wiesz? –

+1

@ Tomalak: Zgaduję. Pojawiło się już kilka razy wcześniej; idealnie pasuje do jego problemu. – SLaks

+1

OK; być może twoja odpowiedź powinna brzmieć "** Być może ** twój przycisk przesyłania ma nazwę" wyślij ". –

0

Powiąż je za pomocą jQuery i wykonaj obsługę jQuery: http://jsfiddle.net/ZmxpW/.

$('select').change(function() { 
    $(this).parents('form').submit(); 
}); 
+2

Jeśli jQuery jest już używany, jest to opcja – mplungjan

+1

@mplungjan: Ale on mówi o '$(). Trigger'. Zakładam, że już korzysta z jQuery. – pimvdb

+1

Zauważyłem po tym, jak skomentowałem. Proszę zobaczyć mój zaktualizowany komentarz – mplungjan

5

Istnieje kilka sposobów, w jaki można to zrobić.

Elementy wiedzą do jakiej formy należą, więc nie trzeba owijać w jquery this, wystarczy zadzwonić pod numer this.form, który zwraca element formularza. Następnie możesz zadzwonić pod numer submit() w elemencie formularza, aby go przesłać.

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

dokumentacja: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

+1

To jest najlepsza odpowiedź. Nie zawsze musisz robić * wszystko * w jQuery - możesz w razie potrzeby miksować je w dowolnym miejscu. –

0

Zastosowanie:

<select onchange="myFunction()"> 

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