从CoffeeScript调用JQuery函数slideUp的问题



我正在尝试将以下JS片段转换为CoffeeScript:

$(document).ready(function(){
  window.setTimeout(function(){
    $('#flash').slideUp('slow', function(){
      $(this).remove();
    })
  }, 1000)
})

我试过了:

$(document).ready ->
  window.setTimeout ->
    $('#flash').slideUp 'slow', (-> $(this).remove()), 1000

会生成以下JS代码:

(function() {
  $(document).ready(function() {
    return window.setTimeout(function() {
      return $('#flash').slideUp('slow', (function() {
        return $(this).remove();
      }), 1000);
    });
  });
}).call(this);

对我来说看起来很相似,但它根本不起作用。该代码片段的目的是在id为#flash的div上执行一个滑升动画,并在动画完成后删除该元素。纯JS片段工作得很好,但我不得到,为什么编译的CS不做它的工作

我对JavaScript或CoffeeScript都不是很有经验,所以我很乐意在这里得到一个提示。

您的原始代码相当于CoffeeScript

$(document).ready ->
  window.setTimeout (->
    $('#flash').slideUp 'slow', (-> $(this).remove())
  ), 1000

相反,您将1000作为slideUp函数的第三个参数。因为setTimeout需要一个时间参数,所以什么也没发生。

请注意,我喜欢在setTimeout周围创建一个包装器函数,为了可读性起见,它交换了两个参数:

window.delay = (ms, func) -> setTimeout func, ms
一旦定义了

,就可以写

$(document).ready ->
  delay 1000, -> $('#flash').slideUp 'slow', (-> $(this).remove())

最新更新