Tengo un formulario con la siguiente:

<form id="my-form" ...>
    ...
    <button type="submit" name="bttnsubmit" value="1">The first button</button>
    <button type="submit" name="bttnsubmit" value="2">The last button</button>
</form>

Me gustaría detectar los cuales activan el formulario de envío de eventos de uso justo:

$('#my-form').submit(function(){
    //psuedo code
    if($('[name=bttnsubmit]').val() == 1) {
        ....
    }
});

Obviamente que el selector de siempre devolverá el valor de la primera bttnsubmit elemento que viene a través, así que necesito algunos otros magia o selector de filtro o algo.

He visto $('[name=bttnsubmit][clicked=true]') promocionado, pero que aún no ha trabajado en mis intentos…

Yo podría, por supuesto, recurrir a $('[name=bttnsubmit]').click() pero preferiría ser capaz de lograr mis metas en el envío de formularios de eventos.

Cualquier ayuda/consejos muy apreciado.

OriginalEl autor Ian Wood | 2013-01-31

3 Comentarios

  1. 12

    No sé si hay alguna construido en datos del evento (tal vez hay), pero una idea que viene a la mente es la de controlar el evento click de los botones y almacenar una referencia global de valor. Algo como esto:

    var ButtonValue;
    
    $('button[type="submit"]').click(function(e){
       ButtonValue = $(this).val();
    });
    
    $('#my-form').submit(function(){
        //psuedo code
        if(ButtonValue == 1)
        {
            ....
        }
    });
    que me hará. thanx

    OriginalEl autor musefan

  2. 5

    Esta respuesta es una mejora de @musefan la respuesta.

    Evitar variables globales. Es mejor mantener los datos en el formulario:

    $('button[type=submit]').click(function (e) {
        var button = $(this);
        buttonForm = button.closest('form');
        buttonForm.data('submittedBy', button);
    });

    Y en el controlador de envío acaba de obtener:

    $('#my-form').submit(function (e) {
        var form = $(this);
        var submittedBy = form.data('submittedBy');
        if(submittedBy.val() == 1) {
            //Any code here...
        }
    });

    Formulario puede ser enviado por pulsar enter. Para evitar null en submittedBy variable:

    var submittedBy = form.data('submittedBy') || form.find('button[type=submit]:first');
    Hm, en realidad no parece funcionar para mí. El botón click controlador está siendo ignorada en favor de la forma submit controlador.
    facepalm el desprecio ^ Es porque estoy utilizando un <input> no <botón> 🙂

    OriginalEl autor Jekis

  3. 0

    Con respecto a su declaración:

    He visto $(‘a[nombre=bttnsubmit][clic= «true»]’) promociona, pero que aún no ha trabajado en mis intentos…

    Me di cuenta que esto no se explica correctamente en otros lugares. No es un sistema automático de cosa. Usted todavía necesita establecido por la adición de la «clic» atributo cualquier momento el botón de enviar se hace clic.

    $("#my-form input[type=submit]").click(function () {
        $("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
        $(this).attr("clicked", "true");
    });
    $("#my-form").submit(function () {
        var clickedSubmitValue = $("input[type=submit][clicked=true]").val();
        if (clickedSubmitValue == "1")
        {
            ...
        }
    });

    Similar al ejemplo aquí.

    Esto está bien documentado también aquí: stackoverflow.com/a/5721762/277303

    OriginalEl autor KloopDogg

Dejar respuesta

Please enter your comment!
Please enter your name here