2011-07-06 4 views
10

Próbuję wygenerować alert, gdy znacznik zakotwiczenia z określoną klasą zostanie kliknięty wewnątrz elementu div.selektor klasy jQuery nie działa

Moja sekcja html w pytaniu wygląda następująco ...

<div id="foo"> 
    <a class='bar' href='#'>Next</a> 
</div> 

Sekcja jQuery jest następująca ..

$('.bar').click(function() 
{ 
    alert("CLICKED"); 
}); 

Moim problemem jest to, że nie mogę dostać ten alert wymyślić, Myślę, że poprawnie wybieram klasę "dalej", ale z jakiegoś powodu jej nie podniesie. Próbowałem też prawie wszystkiego na tym page, ale nic nie działa. Jeśli nie spróbuję podać znacznika zakotwiczenia, np. $ ("# Foo"), kliknij (function() ... to działa, ale w tym dziale będzie wiele znaczników zakotwiczenia, więc po prostu wywołaj alert gdy kliknięcie div nie będzie działało dla tego, czego potrzebuję. Strona, na której się znajduje, to wyszukiwarka korzystająca z ajax do wysyłania informacji do do_search.php. W obrębie do_search.php podejmuję decyzje dotyczące stronicowania w oparciu o liczbę znalezionych wyników, oraz jeśli jest to możliwe, może zostać utworzony następny, poprzedni, ostatni i pierwszy link:

EDYCJA: Właśnie to rozgryzłem, to było moje położenie funkcji .next, ponieważ nie zostało utworzone na początku załadowanie dokumentu, ale zamiast tego po zwróceniu wyniku, przeniosłem funkcję .next do części sukcesu funkcji ajax, ponieważ tam właśnie będą tworzone przyciski, jeśli będą potrzebne, teraz to działa.

Odpowiedz

30

Spróbuj użyć polecenia live():

$(".bar").live("click", function(){ alert(); });

Bo załadować przycisk za pomocą AJAX zdarzenie kliknięcia nie jest z nim powiązane. Jeśli użyjesz komendy live(), automatycznie połączy ona zdarzenia ze wszystkimi elementami utworzonymi po załadowaniu strony.

Więcej szczegółów here

+1

Zrobiłem to, jest dla mnie dużo bardziej sensownym robieniem tego w ten sposób. Dzięki za te informacje, nie wiedziałem o komendzie live(). – dan

+0

Cieszę się, że pomogło :) – linkyndy

+0

Dziękuję. To wymaga więcej upvotes! – MasterV

7

Na pewno brakowało Ci $(document).ready(). Twój kod powinien być:

$(document).ready(function(){ 
     $('.bar').click(function() 
     { 
     alert("CLICKED"); 
     }); 
    }); 

Mam nadzieję, że to pomoże. Pozdrawiam

+1

Alternatywnie, przesuń kod $ (".bar"). Kliknij() po tym, jak mogą działać deklaracje HTML. Jednak istotą problemu jest próba przypisania detektora do DOMElement, który mógł nie zostać utworzony. Powyższy komentarz Edgara to naprawia. Pozdrowienia –

+0

Jeśli $ (dokument) .ready ...jest już obecny, a następnie upewnij się, że jQuery jest uwzględniony w faktach, a ścieżka jest poprawna. Twój kod działa dobrze, zobacz tutaj - http://jsbin.com/ayiquk/ –

+0

Mam dołączoną bibliotekę jquery i $ (dokument) .ready, co pokazałem jest częścią mojego pliku skryptów, który zawarłem z Strona internetowa. To jedyna część, która wydaje się nie działać. Myślę, że powinienem podać więcej informacji w moim oryginalnym poście, ten następny przycisk jest faktycznie tworzony później, witryna jest wyszukiwarką, która używa ajaxa do wysyłania informacji do skryptu php do_search, który wysyła zapytanie do mysql db. Ten następny przycisk jest tworzony w skrypcie php i odtwarzany w oparciu o liczbę stron z informacjami. Istnieje również przycisk poprzedni, ostatni i pierwszy. – dan

1
  1. Upewnij się, że prawidłowo podałeś JQuery Library.
  2. Upewnij się, że scenariusz został napisany między $(document).ready() in short $(function(){ });

Demo: http://jsfiddle.net/W9PXG/1/

<div id="foo"> 
    <a class='bar' href='#'>Next</a> 
</div> 

$(function(){ 
$('a.bar').click(function() 
    { 
    alert("CLICKED"); 
}); 
}); 
4

.live jest teraz przestarzała i jest wybrana odpowiedź w tej sprawie. Odpowiedź znajduje się w komentarzach w wybranej odpowiedzi powyżej. Oto rozwiązanie, które rozwiązało to dla mnie:

$(document).on('click','.bar', function() { alert(); }); 

Dzięki @Blazemonger za poprawkę.