2010-01-22 24 views
6

Soy muy nuevo en jquery y tengo problemas para llamar a más de una instancia de una función.jquery - ¿Cómo puedo llamar a la misma función con diferentes etiquetas de identificación de elementos?

Tengo una función

$('#open_dialog').click(function(){ 
    $("#dialog").dialog("open"); 
     return false;  
}); 

Para llamar a esta función tengo un enlace href con un nombre de etiqueta de identificación de open_dialog. Obviamente, esto funciona muy bien si es el único enlace en la página que hace referencia a la función (una relación uno a uno). Sin embargo, quiero (una relación de muchos a uno).

Tengo una tabla de 25 registros y requiero que cada uno de mis registros tenga un enlace que llame a la función open_dialog Sé que todos los identificadores no se pueden llamar open_dialog porque tienen que ser únicos, por lo tanto, ¿cómo puedo acceder? la función al pasar el valor de cuál de mis 25 registros está creando una instancia de la función.

Por cierto, mis registros son dinámicos, por lo tanto $ ('# open_dialog, open_dialog2, open_dialog3, ...') no es práctico.

Gracias por mirar en mi puesto

Respuesta

11

en lugar de utilizar de una ID única que puede utilizar una clase sobre sus artículos a continuación, sólo tiene que utilizar

$('.classname').click(function() 
{ 
    // 'this' would reference the anchor that was clicked 
    $("#dialog").dialog("open"); 
     return false;  
}); 

También, se puede añadir otro atributo para el anclaje, es decir,

<a href="#" class="classname" record="14">Record 14</a> 

continuación, dentro de su función puede hacer que

var record = $(this).attr("record"); 

record sería ahora contienen 14.

+0

+1 - estaba a punto de enviar la misma respuesta. – Buggabill

+0

Thaks John es una gran ayuda, la única otra cosa es cómo paso un parámetro a la función, por ejemplo, si se hizo clic en recordnumber 14, necesito la función open_dialog para saber que se inicializó mediante el registro 14 y ningún otro – Bazza

+1

Mi sugerencia sería usa la identificación de los elementos para eso. Si está compilando la página dinámicamente, cada uno de los elementos puede tener una identificación única asignada en el momento en que se crean. Luego, puede usar $ (this) .attr ("id") para referirse al ID del elemento al que se hizo clic. – Buggabill

0

usted podría utilizar clase en lugar de Identificación:

$('.open_dialog').click(function(){ 
    $('#dialog').dialog("open"); 
    return false; 
}); 
+0

todo el elemento que tiene una clase de 'open_dialog' abrirá un cuadro de diálogo. – Reigel

+0

No funcionaría - $ (esto) se referirá al enlace en el que se hizo clic, que no es el diálogo que quiere abrir. Tienes que llamar a .dialog en la ID que contiene el contenido del diálogo, en su caso '#dialog'. – Parrots

0

Usted haría nosotros un selector de clase en lugar de un selector de ID.

aplicar la misma clase para cada uno de sus enlaces ... digamos 'openDialog'

<a class='openDialog' href='your link here'>Your text here</a> 

En jQuery, entonces cambiaría lo que tiene que esta ...

$('.openDialog').click(function(){ 
    $("#dialog").dialog("open"); 
    return false;  
}); 

Sin embargo, estoy confundido con respecto a lo que estás haciendo referencia con el id. De "#dialog". Realmente no explicaste lo que está por encima ... o al menos no lo entendí si lo hicieras.

Si existía algún valor del conjunto de registros que necesita para pasar a la función onclick, puede establecer el id. De cada etiqueta de anclaje (suponiendo que estos valores sean únicos) como el valor que debe aprobar, a continuación, hacer referencia a ellos en el código como así ... (me he guardado el identificador del enlace en una variable llamada rec_no abajo ...

$('.openDialog').click(function(){ 
    var rec_no = $(this).attr("id"); 

    $("#dialog").dialog("open"); 
    return false;  
}); 
0

olvidar todo este disparate class todo el mundo está hablando. Sólo utilízalo si es absolutamente necesario (¿por qué agregar inflamación al marcado si no es necesario?). Como dijiste que tus enlaces están en una tabla, puedes obtener todos los enlaces dentro de la tabla como este ...

$("table a").click(function() { ... }); 

O si la tabla tiene un ID en él ...

$("#tableId a").click(function() { ... }); 

obtener su ID de registro dentro del evento de clic es también muy fácil. Depende de la columna que se encuentra. Esto alertará al valor de la primera columna de la tabla (en el evento de clic) ...

var id = $(this).parent().siblings("td:eq(0)").text(); 
alert(id); 
0

Estoy asumiendo la función dialog necesita saber qué registro que' refiriéndose a Tendrá que generar algún tipo de identificación para el registro en su HTML. P.ej.

<a class="open_dialog" id="record1"></a> 

Entonces enmendar la función dialog a aceptar el id del registro como un argumento, y lo pasan en este aspecto:

$('.open_dialog').click(function(){ 
    $("#dialog").dialog("open", $(this).id); 
    return false; 
}); 

Es dialog una de sus funciones, o algo integrado en jQuery?

Cuestiones relacionadas