clearInterval вне метода, содержащего setInterval - PullRequest
3 голосов
/ 13 февраля 2012

У меня есть функция обмена сообщениями, которую можно вызывать несколько раз на одной странице.Каждый раз, когда он вызывается, в верхней части экрана появляется новое сообщение с уникальным идентификатором, устанавливаемым возрастающим глобальным значением.

Общая идея функции приведена ниже:

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

В приведенном выше коде создается новое сообщение и применяется таймер.Если таймер заканчивается, сообщение исчезает.Однако если щелкнуть сообщение в любом месте, кроме кнопки закрытия, таймер должен остановиться, и сообщение должно оставаться до тех пор, пока оно не будет закрыто вручную.

Как найти идентификатор интервала щелчка в окне сообщения?Могут быть одновременно открыты 3 других поля.

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

});

Поскольку у меня есть только класс для запуска клика, я думаю, что единственный возможный способ найти это - установить дополнительное поле для идентификатораокно сообщения?Однако этот метод кажется ненужным и грязным.

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Я бы установил свойство данных в сообщении, в котором хранится идентификатор интервала:

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 голос
/ 13 февраля 2012

Вы используете html5? Вы можете добавить пользовательский атрибут данных для вашего узла. API javascript для этой функции описан здесь .

...