Obtener el elemento de activación de un evento onclick en jquery?

Tengo un formulario donde he sustituido el botón de enviar con una entrada (con tipo=botón) con un onclick que llama a una función existente:

<form accept-charset="UTF-8" action="/admin/message_campaigns" class="new_message_campaign" id="new_message_campaign" method="post">
  <!-- some fields -->
      <input onclick="confirmSubmit();" type="button" value="Send" />
</form>

En el confirmSubmit, me gustaría ser capaz de obtener dinámicamente el objeto de formulario (presentar), en lugar de tener que codificar el formulario de identificación, o pasar como parte de la llamada confirmSubmit(). Yo había pensado que yo podría hacer esto por primera vez el elemento dom en que se hace clic, es decir, algo como esto:

var form = $(this).parents("form");

donde $(this) es el objeto que llama a la función, es decir, la entrada con el onclick. Esto no funciona, aunque. Creo que sería trabajo si me gustaría hacerlo con la .click(function(){ sintaxis. Puedo obtener el elemento que llama a la función de una manera diferente?

EDICIÓN – fue la respuesta de @claudio a continuación, para mayor claridad, he aquí la función completa y llame a:

<form accept-charset="UTF-8" action="/admin/message_campaigns" class="new_message_campaign" id="new_message_campaign" method="post">
  <!-- some fields -->
      <input onclick="confirmSubmit($(this));" type="button" value="Send" />
</form>

y de la propia función. Tenga en cuenta que ‘jConfirm’ es un método de jquery-alertas plugin (http://abeautifulsite.net/blog/2008/12/jquery-alert-dialogs/) pero que en realidad no es relevante para esta cuestión – la clave fue sólo para obtener la forma del objeto, no de lo que posteriormente hacer con ella:

function confirmSubmit(caller) {
  var form = caller.parents("form");
  jConfirm('Are you sure?', 'Please Confirm', function(result){
    if (result) {
      form.submit();
    } else {
      return false;
    }
  });
}
InformationsquelleAutor Max Williams | 2011-05-20

4 Kommentare

  1. 65

    Puede pasar la línea del controlador de la this palabra clave, obteniendo el elemento que desencadena el evento.

    gusta,

    onclick="confirmSubmit(this);"
    • Gracias claudio – ¿cómo puedo manejar que en la función? He intentado esto function confirmSubmit(caller) { var form = caller.parents("form"); pero no funcionó…
    • llama es un elemento de DOM, por lo que tendríamos que hacer confirmSubmit($(this)) para .los padres(‘formulario’) para trabajar.
    • tengo: sólo necesita «jqueryfy de» el llamador: confirmSubmit(caller) { var form = $(caller).parents("form");
    • ah haga lo mismo pero en el otro extremo 🙂 voy a hacerlo a su manera. Gracias!
    • Yo era la carga dinámica de las mesas de python a través de frasco y tuvo que utilizar onclick="my_function($(this))" frente a sólo el uso de (this). Espero que ayude a cualquiera que tenga problemas con esto.
  2. 40

    Si usted no desea pasar el hecho clic en un elemento para la función a través de un parámetro, entonces usted necesita para tener acceso al objeto de evento que está sucediendo, y conseguir el objetivo de ese objeto. Esto se hace más fácilmente si se unen haga clic en el evento como este:

    $('#sendButton').click(function(e){
        var SendButton = $(e.target);
        var TheForm = SendButton.parents('form');
        TheForm.submit();
    
        return false;
    });
    • gracias @laurencek, sé que puedo hacerlo, como que si me puse con jquery, «haga clic en» llamar, me preguntaba acerca de la onclick caso. Saludos tho.
    • Usted puede hacerlo mediante la configuración de la onclick de la misma manera: documento.getElementById(‘…’).onclick = function(e){ target = e.de destino; }, por supuesto, para el IE es un poco diferente, target = ventana.evento.objetivo
  3. 23

    Probar este

    <input onclick="confirmSubmit(event);" type="button" value="Send" />

    Junto con este

    function confirmSubmit(event){
                var domElement =$(event.target);
                console.log(domElement.attr('type'));
            }

    Lo he probado en firefox, se imprime el ‘tipo’ atributo de Elemento de dom clic. Supongo que se le puede dar la forma a través de los padres() métodos de uso de este objeto.

    • Para obtener la forma: $(event.de destino).los padres(‘formulario’)
  4. 7

    La parte superior de google stackoverflow pregunta, pero todas las respuestas son no jQuery relacionados!

    $(".someclass").click(
        function(event)
        {
            console.log(event, this);
        }
    );

    ‘evento’, contiene 2 valores importantes:

    evento.currentTarget – elemento para el cual se desencadena el evento de (‘.someclass’ elemento)

    evento.objetivo – elemento clic (en caso de que cuando en el interior».someclass’ [div] son otros de los elementos y se hace clic en ellos)

    este – es la que desencadena elemento (‘.someclass’), pero es elemento JavaScript, no jQuery elemento, así que si usted desea utilizar algunos de jQuery función, primero debe cambiar a jQuery elemento: $(this)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea