clearInterval包含setInterval的方法之外

时间:2012-02-12 23:58:52

标签: javascript jquery setinterval

我有一个可以在同一页面上多次调用的消息传递功能。每次调用时,屏幕顶部都会显示一条新消息,并且具有由递增全局设置的唯一ID。

该功能的一般概念如下:

var messageTimer = function(msgid, duration) {
  ...
  var interval = setInterval(
    function() {
    ...
    },
    duration
  )
};

在上面的代码中,创建了一条新消息并应用了一个计时器。如果计时器用完,消息将消失。但是,如果在关闭按钮以外的任何地方单击该消息,则计时器应该停止并且消息应该保持到手动关闭为止。

如何找到单击消息框的间隔ID?可能还有3个其他盒子同时打开。

$('body').on('click', '.msg', function() {

});

由于我只有一个类来触发点击,我认为找到这个的唯一可行方法是在消息框的ID中设置一个额外的字段?然而,这种方法似乎没有必要和麻烦。

2 个答案:

答案 0 :(得分:3)

我会在存储间隔ID的消息上设置数据属性:

var messageTimer = function(msgid, duration) {
  ...
  var interval = setInterval(
    function() {
    ...
    },
    duration
  );
  $("#" + msgid).data("i", interval);
};

然后回想一下你的消息内容:

$('body').on('click', '.msg', function() {
    clearInterval(parseInt($(this).data("i"), 10));
});

答案 1 :(得分:1)

您使用的是html5吗?您可以向节点添加自定义数据属性。此功能的javascript API描述为here