我在javascript上太新了..并且有一个简单的咖啡脚本问题。
脚本监视表单上的2个字段,如果其中任何一个发生更改,则更新第三个字段。 表单中有相同类型的“n”行。 这是代码
line_pre = "#po_polines_attributes_"
watched = [ "_qty", "_unit_price"]
UpdateTotal = (ln) ->
jQuery ->
e1 = line_pre + ln + watched[0]·
e2 = line_pre + ln + watched[1]
new_total = $(e1).val()*$(e2).val()
res = line_pre + ln + "_total_price"
$(res).val(new_total)
#
for indx in [0, 1, 2]
do ->
for w_fld in watched
do ->
jQuery ->
$(line_pre + indx + w_fld).focusout ->
UpdateTotal(indx)
代码运行但仅在更改qty或u_p时更新数据的最后一行。 我无法弄清楚原因。
另外..任何人都可以建议如何在jQuery / coffee中找到包含字符串的元素数量 $(“input [name~ ='search_str']”)。length()不起作用..看来返回的元素没有“length / size”函数。
答案 0 :(得分:1)
您的do
缺少某些内容:循环值为参数。
do
提供的函数包装器,如下所示:
for i in a
do -> ...
没有做太多,因为do
的函数仍然会像JavaScript一样共享相同的i
变量:
for(i = 0; i < a.length; ++i)
(function() {
...
})();
但是,如果do
函数将i
作为参数:
for i in a
do (i) -> ...
然后一切都会改变,你开始做do
打算做的事情:
for(i = 0; i < a.length; ++i)
(function(i) {
...
})(i);
请注意,在调用该函数时,do (i) ->
版本如何强制i
评估,以便您不再使用共享i
。
将此应用于循环会产生:
for indx in [0, 1, 2]
do (indx) ->
for w_fld in watched
do (w_fld) ->
jQuery ->
$(line_pre + indx + w_fld).focusout ->
UpdateTotal(indx)