【问题标题】:Translate this jquery into coffee script?将此 jquery 翻译成咖啡脚本?
【发布时间】:2012-06-10 23:33:03
【问题描述】:

我不确定如何构建以下内容。这工作正常:

  $('.hover li').on 'hover', (ev) ->
    $(this).addClass('active')

我知道我可以使用“toggle”而不是“addClass”,但出于其他原因,我需要传递一个处理程序输出函数。所以我尝试了这个:

  $('.element').on 'hover', (ev)
    -> $(this).addClass('active'),
    -> $(this).removeClass('active')

这会返回一个错误 - 'unexpected ,'。我尝试了其他变体,我在网上找到的大多数示例都不使用.on 'hover' (ev) -> 格式。

【问题讨论】:

    标签: jquery coffeescript


    【解决方案1】:

    如果您想同时附加两个事件处理程序,则不能使用 on()

    你需要使用hover():

    $('.element').hover(
      (ev) -> $(this).addClass 'active'
      (ev) -> $(this).removeClass 'active'
    )
    

    甚至更好,使用toggleClass()

    $('.element').hover (ev) -> $(this).toggleClass 'active'
    

    【讨论】:

    • 我最初确实使用了toggleClass,但如果我在页面加载时将鼠标悬停在此元素上,该元素将开始为活动,然后在悬停时切换为非活动等等。
    • 语法正确,但代码对我不起作用。 addClass/removeClass 代码没用,toggleClass 有上面@DamienRoche 提到的错误(这是我想在我的项目中纠正的)。
    【解决方案2】:

    jQuery 的切换函数有两个函数,我认为这就是你所追求的:

    $('.element').toggle 'hover', 
        (ev) -> 
            $(this).addClass('active')
            # Do other stuff...
        (ev) -> 
            $(this).removeClass('active')
            # Do other stuff...
    

    【讨论】:

      【解决方案3】:
      $('.element').on 'hover', (ev) ->
        $(this).addClass('active').removeClass('active')
      

      应该这样做。虽然我不明白。您添加类 active 然后将其删除。尽管如此,上面的代码至少是有效的coffeescript。

      【讨论】: