我有一个CoffeeScript文件作为Rails应用程序的一部分,如下所示
jQuery ->
$ ->
$('#secondthing').hide()
$('#trips').change ->
trips = $('#trip_quantity :selected').text()
if trips == '1'
$('#secondthing').hide()
else
$('#secondthing').show()
现在,在行程更改时执行的代码部分工作正常。但是,一旦页面加载后执行的第一部分代码就不会改变。我不知道从哪里开始
答案 0 :(得分:1)
尝试删除第二行的$ ->
。
jQuery ->
// $ ->
$('#secondthing').hide()
$('#trips').change ->
trips = $('#trip_quantity :selected').text()
if trips == '1'
$('#secondthing').hide()
else
$('#secondthing').show()
答案 1 :(得分:1)
您的代码没有问题,因此如果它不起作用,原因必须是您未显示的部分。但是我指出了一些显然让人混淆的事情。
首先,不需要在同一范围内同时使用jQuery
和$
。 $
只是jQuery
的别名,并且两个名称都有意义的唯一情况是出于兼容性原因(与其他版本的jQuery或其他库也使用$
作为快捷方式)您将代码封装在如下模块中:
(function($) {
// Now $ is bound to whatever object you pass in
})(jQuery);
鉴于我们可以在您的代码中自由地将$
替换为jQuery
,下一条误解就是(在一行上压缩):
$ -> $ -> $("#foo").hide()
此代码段安排在加载DOM后执行回调。这个回调反过来安排另一个回调,以便在加载DOM后隐藏#foo
。由于第二个计划是在已经加载DOM的情况下运行的,因此实际上它会立即执行。这就是为什么,即使你应该真的使用
$ -> $("#foo").hide()
原始代码中的任何额外“级别”都无害,实际上一切正常as expected。顺便说一下,这是您代码中最紧凑的版本:
$ ->
el = $("#secondthing")
el.hide()
$("#trips").change ->
el[if $('#trip_quantity :selected').text() == '1' then "hide" else "show"]();