【问题标题】:each loop in coffeescript, jqueryCoffeescript,jquery中的每个循环
【发布时间】:2011-10-21 01:27:05
【问题描述】:

我是 javascript 新手,开始混合使用 javascript + jquery + coffeescript 对于像我这样的新手来说并不容易......

我创建了一个非常简单的可排序列表,我想即时重新编号我的列表(服务器端代码没问题)。

我写的coffeescript代码是:

jQuery ->
  $('.simple_grid tbody').sortable
    axis: 'y'
    containment: 'parent'
    cursor: 'move'
    tolerance: 'pointer'
    update: (event,ui)->
      $.post($(this).attr('dataupdateurl') + '/' + ui.item.attr('id') + '/reorder/' + ui.item.index())
      $('tr > td > a > span.number').each (i, element)  =>
      $(element).html i

这会生成一个这样的表

<table class= "simple-grid">
   <tbody dataupdateurl = "xxx">
      <tr>
         <td>
            <a href="some_link"><span class="number">1</span>text 1</a>
         </td>
          <td>
            <a href="some_link"><span class="number">2</span>text 2</a>
         </td>
        <td>
            <a href="some_link"><span class="number">3</span>text 3</a>
         </td>
      </tr>
   </tbody>
</table>

当更新回调触发时,我正在尝试重新编号 span.number 元素中的内容,但我收到以下错误消息:

元素未定义

非常欢迎任何帮助!谢谢!

更新:问题是由于我错过了最后一个函数中的缩进:

$('span.number').each (i, element)  =>
      $(element).html i

【问题讨论】:

    标签: javascript jquery coffeescript each


    【解决方案1】:

    我不知道咖啡脚本,但通常使用 jQuery 选择器不需要完整路径。 例如$('tr &gt; td &gt; a &gt; span.number') 可以改写为$('.number'),.each() 通常用作.each(function(index, element) { YOUR CODE });。看起来不合适的最后一件事是设置 html,这通常以.html('value') 完成。所以在你的情况下$(element).html(i);。希望这会有所帮助?

    【讨论】:

    • 你好,你是对的选择器完整路径。我改变了它。谢谢。关于剩下的,我认为它的咖啡脚本语法等同于你在 javascript 中所说的。但肯定有什么地方不对劲……
    • 如果您阅读代码,逻辑上会出现一个帖子,然后您会直接执行每个帖子。有可能由于事件的顺序,post 完成了,dom 没有完全创建。尝试将 .each 功能移动到 $(document).ready(function(){});或咖啡脚本等价物。因此,您知道一旦 post 完成并创建了 dom,脚本将始终执行。它仍然发生在渲染之前?
    • 你猜怎么着?代码没问题。这只是缩进的问题......我根据您的建议移动代码时发现了这一点。非常感谢!
    • 您能否更新问题以反映实际问题?这将是对其他人的良好教育。
    猜你喜欢
    • 2012-07-07
    • 2016-07-21
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多