我对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)
代码运行,但仅在数量或u_p更改时更新数据的最后一行。我不知道为什么。
另外..任何人都可以建议如何在jQuery/coffee中找到包含字符串的#元素$("input[name~='search_str']").length() 不起作用 ..返回的元素似乎没有"长度/大小"函数。
您的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)