2013-07-09 22 views
13

Chciałbym skonfigurować proste zdarzenie onClick jQuery, aby dynamiczne interfejsu użytkownika na szablonie kierownicy. Zastanawiam się do addClass() po określonym kliknięciem.obsługa zdarzenia jQuery onClick na kierownicy

rozważyć HTML (generowanego przez kierownicę)

{{#if hasButton}} 
     <div id="container">  
      <button type="submit" class="myButton">Click me!</button> 
     </div> 
    {{/if}} 

tj: Po kliknięciu w przycisk, jego opakowanie otrzyma klasę obciążenia, które będą tworzyć interakcję za pomocą CSS.

Ten kod powinien znajdować się na moim szablonie kierownicy lub czy powinienem go przepisać na konkretnego pomocnika? Czy istnieją jakieś przykłady, które można by podać, abym mógł je przestudiować, a następnie opracować coś podobnego?

Z góry dziękuję!

+0

Powinieneś przechowywać 'html',' css' i 'js' oddzielone. Jeśli tworzysz coś z szablonu, powinieneś wiedzieć, jakie działania powinny mieć miejsce w szablonie. (albo dlatego, że wysyłasz te informacje z szablonem z serwera), albo dlatego, że już wiesz w swoim kodzie. Więc zarejestruj "wywołania zwrotne" dla twojego wydarzenia po dołączeniu szablonu lub skorzystaj z opcji [delegate] (http://api.jquery.com/on/#direct-and-delegated-events) na zdarzenia (coś w stylu: '$ (containerWhereYouAddThetemplateTo) .on (" click "," .myButton ", function() {})'; –

Odpowiedz

13

Musisz odświeżyć swoje słuchacze Jquery PO wstawieniu węzłów do DOM HTML.

var source = "<li><a href="{{uri}}">{{label}}</a></li>"; 
var template = Handlebars.compile(source); 
var context = {"uri":"http://example.com", "label":"my label"}; 
$("ul").append(template(context)); 

// add your JQuery event listeners 
$("li").click(function(){ alert("success"); }); 
0

Nie jestem pewien, jaki jest dokładnie twój problem. Jest to poprawne, jeśli zachowujesz JavaScript w pliku * .js, perhaps używając parent() zamiast tego na prev() w tym konkretnym przypadku.

+0

Problem polega na tym, że zdarzenie nie jest wyzwalane, ponieważ dodanie jQuery po prostu nie działa (ten kod faktycznie działa na szablonie kierownicy nie jest zewnętrznym js). (btw zmieniłem z prev() na parent() dla lepszej czytelności kodu) – Hal

38

nie ma potrzeby, aby ponownie obsługi zdarzeń na każdym dynamicznej aktualizacji DOM jeśli definiując je na poziomie dokumentu:

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

Nadzieja to pomaga! :-)

+0

tak to robi się w nowoczesnej aplikacji internetowej! – ProblemsOfSumit

+2

Słowo, zrób to w ten sposób, ale lubię zawęzić tak dużo, jak to możliwe, zastępując "dokument" najbliżej renderowalnym węzłem, takim jak element div, w którym renderowany jest szablon kierownicy. –

Powiązane problemy