更改跨度的内容然后等待

时间:2012-01-18 12:23:54

标签: javascript jquery jquery-ui coffeescript

我的问题:我有一个包含数组的JSON数组,我将其渲染到body标签中 - 所以它看起来像这样:

<body data-flashes="[["message","Welcome"],["error","This is working!"],["",""]]">

我想做以下事情:

  1. 转到外部数组中的每个元素
  2. 内部数组中的第一个元素将成为span
  3. 的类名
  4. 内部数组中的第二个元素将成为范围
  5. 中的文本
  6. 动画范围
  7. 等待10秒
  8. 重新开始
  9. (它总是相同的跨度) 我的尝试:

    window.pause = ( ms ) -> (
        date = new Date()
        currentDate = null
    
        loop
            currentDate = new Date()
            break unless currentDate-date < ms
    )
    window.showFlashes = () -> (
        $.each( window.$('body').data('flashes'), () -> (
                window.$('#flash_container').attr( 'class', this[0] )
                window.$('#flash_container').text( this[1] )
                window.$('#flash_container').effect( 'pulsate' )
    
                alert this
    
                pause( 10000 )
            )
        )
    )
    

    这是coffeescript,它将rails渲染到以下javascript文件中:

    (function() {
    
      window.pause = function(ms) {
        var currentDate, date, _results;
        date = new Date();
        currentDate = null;
        _results = [];
        while (true) {
          currentDate = new Date();
          if (!(currentDate - date < ms)) {
            break;
          } else {
            _results.push(void 0);
          }
        }
        return _results;
      };
    
      window.showFlashes = function() {
        return $.each(window.$('body').data('flashes'), function() {
          window.$('#flash_container').attr('class', this[0]);
          window.$('#flash_container').text(this[1]);
          window.$('#flash_container').effect('pulsate');
          alert(this);
          return pause(10000);
        });
      };
    
      window.exit_after = function(ms) {
        var _results;
        setTimeout("return 0", ms);
        _results = [];
        while (true) {
          _results.push(ms = 1);
        }
        return _results;
      };
    
    }).call(this);
    

    现在是“真正的”问题:只要我在代码中有alert this它就可以正常工作(除了动画不能正常工作)。但当我删除它时,代码停止工作。

    我的第二个问题是:有没有办法解决pause功能?我宁愿使用setTimeout(),但我不知道如何......

1 个答案:

答案 0 :(得分:0)

setTimeout()是所有这一切的解决方案。

它需要两个参数,第一个是要执行的字符串,第二个是从现在开始的延迟(以毫秒为单位)。

为了简化这一点,我将你的代码块包装在一个函数中,然后使用setTimeout()调用这个函数。例如:

function do_stuff()
{
...
}

setTimeout("do_stuff()",10000);

意味着将在10秒的时间内调用do_stuff()。

我希望有所帮助。