2011-09-07 3 views
5

¿Cómo se manejan los eventos de clic dentro de un complemento? Una descripción simplificada es que quiero tener un complemento que detecte un clic y luego actualice otro elemento.¿Cómo se manejan los eventos de clic dentro de un plugin jQuery?

Ejemplo de Uso:

$("#some_id").myPlugin("another_id");

Ejemplo Plugin:

(function($){ 

    $.fn.myPlugin=function(update_id){ 

    .click({$(update_id).html("content_upated");}); 

    } 

})(jQuery); 

no entiendo cómo codificar el evento .click dentro del plug-in. Cualquier ejemplo sería útil. Gracias.

Respuesta

13

Usted debe hacer dos cosas:

  1. Use this hacer referencia a los elementos a los que se está aplicando su plugin
  2. Namespace your events, para que puedan ser fácilmente sin unir más tarde

Pruebe lo siguiente

(function($){ 

    $.fn.myPlugin = function(update_id) { 

     this.bind("click.myPlugin", function() { 
     $(update_id).html("content_upated"); 
     }); 

    }; 

})(jQuery); 

Debe leer la página en jQuery plugin authoring para obtener más información sobre cómo desarrollar correctamente los complementos de jQuery. Te faltan otros detalles importantes, como aceptar un objeto de argumentos.

+3

+1 usando el espacio de nombres del evento es definitivamente una buena idea. Mi única sugerencia es '.unbind()' el mismo evento de espacio de nombres antes de vincularlo para evitar manipuladores de eventos duplicados en caso de que el complemento se llame varias veces en el mismo elemento. –

+0

@Matt Excelente consejo – meagar

+0

+1 a esto ya que cubría también el espacio de nombres que no había considerado, excelente respuesta. – Kasaku

-1
(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function(){ $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

Asegúrese de update_id es un selector válido.

+0

quien me votó negativamente, podría explicar por qué –

+6

Probablemente porque no se tomó el tiempo de explicar nada en su respuesta, por lo que es apenas una respuesta. Es más importante que explique * por qué * y * cómo * arregló algo, en lugar de simplemente publicar el código fijo. – meagar

0

Invocaría .each() para iterar sobre los elementos coincidentes, o puede adjuntar a través del método jQuery normal.

(function($) 
{ 
    $.fn.myPlugin = function(anotherIdentifier) 
    { 
      // this.click is equivalent to $(identifier).click() 
      this.click(function() 
      { 
       // Thing to do 
      }); 
    }; 
})(jQuery); 
1

Uso this para acceder al objeto de que el plugin se invoca en:

(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function() { $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

Tenga en cuenta que necesitaría el uso de incluir el selector de ID en este ejemplo, o se tendría que incluir en su haga clic función:

$("#some_id").myPlugin("#another_id"); 
0
(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function(){ $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

Asegúrese update_id es un selector válido.

Cuestiones relacionadas