Javascript clearInterval在包含setInterval的方法之外

Javascript clearInterval在包含setInterval的方法之外,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我有一个可以在同一页面上多次调用的消息传递功能。每次调用它时,屏幕顶部都会出现一条新消息,消息的唯一ID由递增的全局变量设置 该功能的总体思路如下: var messageTimer = function(msgid, duration) { ... var interval = setInterval( function() { ... }, duration ) }; 在上面的代码中,将创建一条新消息并应用计时器。如果计时器用完,消息将消失。但是

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

该功能的总体思路如下:

var messageTimer = function(msgid, duration) {
  ...
  var interval = setInterval(
    function() {
    ...
    },
    duration
  )
};
在上面的代码中,将创建一条新消息并应用计时器。如果计时器用完,消息将消失。但是,如果在除“关闭”按钮之外的任何位置单击消息,则计时器应停止,消息应一直保留到手动关闭

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

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

});

因为我只有一个类来触发click by,所以我认为找到它的唯一可能的方法是为消息框的ID设置一个额外的字段?但是,此方法似乎不必要且混乱。

我将在存储间隔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));
});

你在使用html5吗?可以向节点添加自定义数据属性。此功能的javascript API已被描述。

显然,您必须将
interval
存储在某个地方。如果你只有一个(或一小部分)这样的间隔是并行的,你可以简单地使用一个全局变量(或数组或对象)。谢谢你的帮助。