2011-08-31 27 views
30

Tengo un formulario con una selección y algunas entradas de texto. Me gustaría que se envíe el formulario cuando se cambie la selección. Esto funciona bien usando la siguiente:Javascript select onchange = 'this.form.submit()'

onchange="this.form.submit()" 

Sin embargo, si el formulario también contiene un botón de enviar, a continuación, la forma no se somete cuando se cambia la selección. Estoy adivinando algún tipo de conflicto.

¿Cuáles son mis opciones aquí?

¿Debo usar algo como $(this.form).trigger("submit") ?

+0

Proporcionar un caso de prueba que presenta el tema, por lo que podemos responder sin adivinar salvaje –

+6

Asegúrese de que el botón no tiene un nombre o el atributo id de "enviar", he visto esto como una interferencia antes. – GBa

+0

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

Respuesta

49

Usted debe ser capaz de usar algo similar a:

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

Si estás usando jQuery, es tan simple como esto:

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

Mis habilidades de depuración psíquicos me dicen que su presente El botón se llama submit. Por lo tanto, form.submit hace referencia al botón y no al método.

Cambie el nombre del botón a otra cosa para que form.submit haga referencia nuevamente al método.

+3

¿Cómo lo sabes? –

+1

@Tomalak: solo estoy adivinando. Esto ha aparecido varias veces antes; coincide con su problema perfectamente. – SLaks

+1

OK; tal vez su respuesta debería decir "** Quizás ** su botón de envío se llama' enviar' ". –

0

Enlácelos usando jQuery y haga que jQuery lo maneje: http://jsfiddle.net/ZmxpW/.

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

Si jQuery ya está usado, entonces es una opción – mplungjan

+1

@mplungjan: Pero él está hablando de '$(). Trigger'. Supongo que ya está usando jQuery. – pimvdb

+1

Me di cuenta después de que comencé. Por favor, consulte mi comentario actualizado – mplungjan

5

Hay varias maneras en que esto se puede completar.

Los elementos saben a qué formulario pertenecen, por lo que no necesita envolver this en jquery, simplemente puede llamar al this.form que devuelve el elemento de formulario. Luego puede llamar al submit() en un elemento de formulario para enviarlo.

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

documentación: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

+1

Esta es la mejor respuesta. No siempre tienes que hacer * todo * en jQuery: puedes mezclarlo cuando sea apropiado. –

0

Uso:

<select onchange="myFunction()"> 

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