2010-01-22 14 views
6

Jestem bardzo nowy w jquery i mam problem z wywołaniem więcej niż jednego wystąpienia funkcji.jquery - Jak wywołać tę samą funkcję za pomocą różnych znaczników identyfikatora elementu?

Mam funkcji

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

nazwać tę funkcję Mam href związek z o nazwie znacznika ID open_dialog. Oczywiście działa to świetnie, jeśli jest to jedyne łącze na stronie odwołującej się do funkcji (relacja jeden do jednego). Jednak chcę (wiele do jednego związku).

Mam tabelę 25 rekordów i wymagam, aby każda z moich rekordów miała łącze, które będzie wywoływać funkcję open_dialog Wiem, że wszystkie identyfikatory nie mogą być nazwane open_dialog, ponieważ muszą być unikatowe, więc jak uzyskać dostęp funkcja podczas przekazywania wartości, której jeden z moich 25 rekordów tworzy instancję.

Przy okazji, moje zapisy są dynamiczne, dlatego $ ("# open_dialog, open_dialog2, open_dialog3, ...") jest niepraktyczne.

Dziękujemy za patrząc na mój post

Odpowiedz

11

zamiast stosowania unikalnych identyfikatorów można użyć klasy na swoje pozycje, a następnie po prostu użyć

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

też można dodać inny atrybut do kotwicy, czyli

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

następnie wewnątrz funkcji można mieć

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

record będzie teraz zawierać 14.

+0

+1 - właśnie chciał przesłać tę samą odpowiedź. – Buggabill

+0

Thaks John, co jest wielką pomocą, jedyną rzeczą, jaką mogę przekazać do funkcji, np. Gdy kliknięto numer rekordu, potrzebuję funkcji open_dialog, aby wiedzieć, że została zainicjalizowana przez rekord 14 i żadna inna – Bazza

+1

Moja sugestia to użyj identyfikatora elementów dla tego. Jeśli budujesz stronę dynamicznie, każdy z elementów może mieć unikalny identyfikator przypisany w momencie ich tworzenia. Następnie możesz użyć $ (this) .attr ("id"), aby odwołać się do id elementu, który został kliknięty. – Buggabill

0

Można użyć klasa zamiast id:

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

wszystkie elementy z klasą "open_dialog" otworzą okno dialogowe. – Reigel

+0

Nie działa - $ (this) będzie odnosić się do klikniętego łącza, które nie jest dialogiem, który chce otworzyć. Musisz wywołać .dialog na identyfikatorze, który zawiera zawartość okna dialogowego, w jego przypadku "#dialog". – Parrots

0

by nas selektor klasy zamiast selektor id Ty.

Zastosuj tę samą klasę do każdego z linków ... powiedzmy 'openDialog'

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

w jQuery następnie chcesz zmienić to, co masz do tego ...

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

Nie rozumiem jednak, do czego się odwołujesz, używając identyfikatora "#dialog". Naprawdę nie wyjaśniłeś, co jest powyżej ... a przynajmniej nie dostałem tego, jeśli to zrobiłeś.

Jeśli z zestawu rekordów, który ciągniesz, musisz przejść do funkcji onclick, możesz ustawić wartość każdego znacznika zakotwiczenia (zakładając, że wartości te są unikalne), aby była to wartość, którą należy przekazać, następnie odwołać je w kodzie jak tak ... (mam zapisany identyfikator łącza w zmiennej o nazwie rec_no poniżej ...

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

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

Zapomnij o tym wszystkim class bzdury wszyscy mówią o Only. użyj tego, jeśli koniecznie musisz (dlaczego dodajesz nadmiar do znaczników, jeśli jest to niepotrzebne?) Ponieważ powiedziałeś, że twoje linki są w tabeli, możesz uzyskać wszystkie odnośniki w tabeli w ten sposób ...

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

Lub, jeśli tabela ma identyfikator na nim ...

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

Pobierz ID rekordu wewnątrz zdarzenia click jest zbyt łatwe. Zależy która kolumna jest w. To zaalarmować wartość pierwszej kolumny w tabeli (w przypadku kliknięcia) ...

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

Jestem zakładając funkcja dialog musi wiedzieć, które rejestrują you” odnoszą się do. Będziesz musiał wygenerować jakiś identyfikator dla rekordu w kodzie HTML. Na przykład.

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

Następnie zmienić funkcję dialog przyjąć identyfikator rekordu jako argumentu, i przekazać ją w ten sposób:

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

Czy dialog jeden ze swoich funkcji, albo coś wbudowane w jQuery?

Powiązane problemy