2010-01-22 9 views
6

Sono un jquery molto nuovo e sto avendo problemi a chiamare più di un'istanza di una funzione.jquery - Come si chiama la stessa funzione con tag ID elemento diversi?

Ho una funzione

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

Per richiamare questa funzione ho un link href con un nome tag id open_dialog. Ovviamente questo funziona alla grande se è l'unico link sulla pagina che fa riferimento alla funzione (relazione uno a uno). Tuttavia, voglio (una relazione molti a uno).

Ho una tabella di 25 record e ho bisogno che ognuno dei miei record abbia un collegamento che chiamerà la funzione open_dialog. So che tutti gli id ​​non possono essere chiamati open_dialog in quanto devono essere unici, quindi come posso accedere la funzione mentre si passa il valore di cui uno dei miei 25 record sta creando un'istanza della funzione.

Dal modo in cui i miei record sono dinamici quindi $ ('# open_dialog, open_dialog2, open_dialog3, ...') non è pratico.

Grazie per guardare il mio post

risposta

11

invece di usare id uniche di è possibile utilizzare una classe sui vostri articoli poi basta usare

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

inoltre, è possibile aggiungere un altro attributo per l'ancora, vale a dire

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

poi dentro la vostra funzione è possibile avere

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

record sarebbe ora contenere 14.

+0

+1 - stavo per inviare la stessa risposta. – Buggabill

+0

Thaks John è di grande aiuto l'unica altra cosa è come passare un parametro alla funzione, ad es. Se il numero di record 14 è stato cliccato ho bisogno della funzione open_dialog per sapere che è stato inizializzato tramite record 14 e nessun altro – Bazza

+1

Il mio suggerimento sarebbe di usa l'id degli elementi per quello. Se si sta costruendo la pagina in modo dinamico, a ciascuno degli elementi può essere assegnato un ID univoco al momento della creazione. Quindi, puoi usare $ (this) .attr ("id") per fare riferimento all'id dell'elemento su cui è stato fatto clic. – Buggabill

0

si potrebbe usare classe invece di id:

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

tutto l'elemento che ha una classe di 'open_dialog' aprirà una finestra di dialogo. – Reigel

+0

Non funzionerebbe - $ (questo) si riferirà al collegamento su cui è stato fatto clic, che non è la finestra di dialogo che vuole aprire. Devi chiamare .dialog sull'ID che contiene il contenuto della finestra di dialogo, nel suo caso '#dialog'. – Parrots

0

Lo faresti noi un selettore di classe, invece di un selettore id.

applicare la stessa classe per ciascuno dei vostri link ... Diciamo 'OpenDialog'

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

In jQuery si dovrà modificare quello che hai da questo ...

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

Sono confuso da cosa tu stia facendo riferimento all'ID "#dialog". Non hai davvero spiegato cosa sia sopra ... o almeno non l'ho capito se l'hai fatto.

Se esistesse un valore dal recordset che si sta estraendo che era necessario passare alla funzione onclick, è possibile impostare l'id di ciascun tag di ancoraggio (presupponendo che questi valori siano univoci) come il valore che è necessario passare, poi riferimento all'interno del codice in questo modo ... (ho memorizzato l'ID del collegamento in una variabile denominata rec_no sotto ...

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

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

dimenticare tutto questo class sciocchezze tutti gli altri sta parlando. Solo usalo se devi assolutamente (perché aggiungere un aumento al markup se non è necessario?). Dal momento che hai detto che i tuoi link sono in una tabella, puoi ottenere tutti i link all'interno della tabella in questo modo ...

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

Oppure, se il tavolo ha un ID su di esso ...

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

ottenere il tuo ID record di dentro l'evento click è troppo facile. Dipende da quale colonna si trova. Questo avviserà il valore della prima colonna della tabella (all'interno dell'evento click) ...

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

sto assumendo la funzione dialog ha bisogno di sapere che record' riferimento a. Dovrai pubblicare una sorta di id per il record nel tuo codice HTML. Per esempio.

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

Poi modificare la funzione dialog di accettare id del record come argomento, e passarlo in questo modo:

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

È dialog una delle vostre funzioni, o di qualcosa di costruito per jQuery?

Problemi correlati