从 CoffeeScript 调用 JQuery 函数 slipUp 时出现问题

发布于 2024-11-28 05:12:24 字数 826 浏览 2 评论 0原文

我正在尝试将以下 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 根本没有太多经验,所以我会很高兴在这里得到提示。

I am trying to convert the following JS snippet to CoffeeScript:

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

I tried this:

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

which leads to the following JS code:

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

Looks pretty similar to me, but it simply does not work. The intention of the snippet is, to do a slideUp animation on the a div with the id #flash, and remove the element, when the animation is done. The pure JS Snippet works fine, but I don't get, why the compiled CS does not do it's job

I am not very experience with JavaScript or CoffeeScript at all, so I would be very happy vor a hint here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离去的眼神 2024-12-05 05:12:24

您的原始代码与 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())

Your original code is equivalent to the CoffeeScript

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

Instead, you've made 1000 a third argument to the slideUp function. Since setTimeout requires a time argument, nothing happens.

Note that I like to make a wrapper function around setTimeout that swaps the two arguments for readability's sake:

window.delay = (ms, func) -> setTimeout func, ms

Once that's defined, you can write

$(document).ready ->
  delay 1000, -> $('#flash').slideUp 'slow', (-> $(this).remove())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文