2013-07-09 21 views
13

Basitçe bir jQuery onClick olayı oluşturmak için bir tutamaç stilinde UI dinamik yapmak istiyorum. Belirli bir tıklamadan sonra addClass() 'ı merak ediyordum. Bir düğmeye içinde bir tıklama sonra kabını CSS kullanarak iletişimde bulunacaktır bir yükleme sınıfını alırsınız: jQuery onClick olayını handbar'larda kullanma

(gidon tarafından oluşturulan) HTML

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

yani düşünün.

$(".myButton").on("click", function(event){ 
     $(this).parent().addClass("loading"); 
}); 

Bu kod, gidonlar şablonumdan devam etmeli veya bunu belirli bir yardımcıda yeniden yazmalı mıyım? Sağlanabilecek herhangi bir örnek var mı? Böylece, benzer bir şey geliştirdim.

Şimdiden teşekkürler!

+0

'html',' css' ve js' ayrılmış olmalıdır. Bir şablondan bir şey oluşturursanız, şablonda hangi işlemlerin gerçekleştirilmesi gerektiğini bilmelisiniz. (Bu bilgiyi şablonla sunucudan gönderdiğinizden) veya kodunuzda zaten bildiğiniz için. Bu yüzden ya şablona ekledikten sonra olayınız için 'geri aramaları' kaydedin ya da etkinlikler için [delege] (http://api.jquery.com/on/#direct-and-delegated-events) kullanırsınız. '$ (containerWhereYouAddThetemplateTo) .on (" click "," .myButton ", function() {});; –

cevap

13

Jquery dinleyicilerinizi, düğümlerin DOM HTML'nize eklenmesinden sonra yenilemeniz gerekir. Bu yardımcı olur

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

Umut:

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

Sorununuzun tam olarak ne olduğundan emin değilim. Bu özel durumda, JavaScript'inizi bir * .js dosyasında, perhaps dosyasında (bu örnekte prev() yerine parent() öğesini kullanarak tutarsanız, bu şekilde doğrudur.

+0

Sorun, olayın tetiklenmemesidir çünkü jQuery'nin eklenmesi işe yaramaz (bu kod aslında gider. handlebars şablonunda bir harici js değil. (btw daha iyi kod okunabilirliği için prev() için ebeveyn() değişti) – Hal

38

Eğer belge düzeyinde tanımlayarak eğer her dinamik DOM güncelleme üzerine olay işleyicisi yeniden bağlanması için gerek yoktur! :-)

+0

bu nasıl bir modern web uygulaması bitti! – ProblemsOfSumit

+2

Word, bu şekilde. Ama ben ister En yakın renderable düğüm için 'document' yerine, olabildiğince dar, gidon şablonunu oluşturduğunuz div gibi. –

İlgili konular