CoffeeScript - 简单的循环没有按照我认为应该的方式执行



我对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)

最新更新