我是咖啡脚本的新手,我正在解决与事件绑定的问题。 我有一个div,它是通过ajax更新然后我想在返回的部分上定义一些额外的jquery事件。 这一切都在rails 3.2上运行。 我的js.erb返回此部分:
$('#top_box').empty()
$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')
表单部分有一个文本字段,我想要一些额外的事件处理,即
$('#link_long').on('click',function(){ $('#link_long').val("" );})
当我将上述行添加到js.erb文件中时,一切正常,但我想看看如何在咖啡中完成。所以,我把那条线翻译成咖啡,比如
$ ->
$('#link_long').on 'click', ->
$('#link_long').val("")
生成的咖啡js代码是
(function() {
$(function() {
return $('#link_long').on('click', function() {
return $('#link_long').val("");
});
});
}).call(this);
但咖啡脚本永远不会奏效。有人可以告诉我为什么吗?
答案 0 :(得分:1)
这是一个猜测,但你可能在附加部分之前绑定事件。 $('#link_long')
找不到您的元素,因为它尚不存在,因此没有任何反应。你的JS中断 - &gt; CS翻译可能会将点击处理程序移动到它自己的$ ->
回调中,而我在这里猜测 - 它正在运行append
之前运行。在任何情况下,拥有多个相互依赖的文档就绪处理程序都会遇到麻烦。
最明显的选择是在追加后绑定:
$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')
$('#link_long').on 'click', -> $('#link_long').val("")
另一种选择是绑定文档,然后通过选择器进行过滤(当事件被触发时,过滤完成,因此您可以在所选元素存在之前进行绑定):
$(document).on('click', '#link_long', -> $('#link_long').val(""))