Na minha página da web, eu tenho um elemento div que é dinamicamente anexado à minha página.
Nesse div eu tenho um link que quando clicado, ele puxa os dados do meu servidor usando ajax.
<div class="main-div">
<a href="#" class="pull-data"><b>Click Here</b></a>
</div>
Se eu tiver um evento on click no jQuery na página, ele funciona bem:
$("a.pull-data").on("click", function(e) {
console.log("Clicked!");
}
No entanto, quando tento converter isso em coffeescript, nada é acionado:
jQuery ->
$("a.pull-data").on "click", ->
console.log "Clicked?"
Há algo faltando no meu café? Como posso consertar meu coffeescript para obtê-lo para capturar um clique em um elemento adicionado dinamicamente?
Respostas:
0 para resposta № 1Seus dois exemplos de código não são equivalentes:
$("a.pull-data") // create a jquery object matching the CSS selector
.on("click", function(e) { // add a click handler that
console.log("Clicked!"); // logs "Clicked!" to the console
});
e aqui está a versão transpilada do seu café:
jQuery(function() { // pass anon fn to jQuery constructor
return $("a.pull-data").on("click", function() { // returning a fn that
return console.log("Clicked?"); // attaches the click handler
});
});
que está criando uma função anônima que faz todas as coisas que você quer e, em seguida, passa para o construtor jQuery, o que significa que não faz nada porque nunca é realmente chamado.
Sempre sempre, SEMPRE olhar para a sua saída JavaScript sempre que há um problema. Você pode até usar o compilador interativo em coffeescript.org para construir funções, mantendo um olho na saída.