отменить JS во время ожидания - PullRequest
1 голос
/ 28 ноября 2011

У меня есть этот бит кода на экране загрузки, который ждет пять секунд, прежде чем войти в систему пользователя:

  setTimeout(
    function() {
        $.doPost("http://mysite.com", {
                username: results.rows.item(0).username,
                password: results.rows.item(0).password
            });
  }, 5000);

Пока страница находится в ожидании, у меня также есть кнопка на экране с надписью «Выйти из системы», и, если щелкнуть ее, эта запись не должна появиться. По сути, у пользователя есть пять секунд, чтобы нажать кнопку «Выйти из системы», прежде чем он автоматически войдет в систему. Кнопка «Выйти» имеет значение onClick, и независимо от того, что я ввел в эту функцию, она продолжает работу после входа в систему, как я могу остановить эту кнопку $.doPost что случилось?

Ответы [ 4 ]

6 голосов
/ 28 ноября 2011

Сначала назначьте время ожидания переменной:

var timer = setTimeout(

function () {
    $.doPost("http://mysite.com", {
        username: results.rows.item(0).username,
        password: results.rows.item(0).password
    });
}, 5000);

Затем в коде кнопки выхода из системы используйте clearTimeout():

$('#button').click(function () {
    clearTimeout(timer);
}

Будьте осторожны с областью действия вашей переменной, так как она используется в двух отдельных функциях. В этом случае неплохо было бы объявить это в глобальном пространстве имен:

var timer;

$('#login').click(function () {
    timer = setTimeout(

    function () {
        $.doPost("http://mysite.com", {
            username: results.rows.item(0).username,
            password: results.rows.item(0).password
        });
    }, 5000);
});

$('#logout').click(function () {
    clearTimeout(timer);
});

Если вы поместили оба события в $(document).ready(), вместо этого вы можете объявить var timer, чтобы остановить любое загрязнение.

1 голос
/ 28 ноября 2011

Вам нужно сохранить результат из setTimeout и вызвать clearTimeout для этого результата, чтобы отменить его.

1 голос
/ 28 ноября 2011

Сохраните возвращаемое значение setTimeout () как «timerHandle», и, если вы хотите отменить это время ожидания, вызовите «clearTimeout ()» для этого timerHandle.

0 голосов
/ 28 ноября 2011

Можно ли использовать глобальное логическое значение, чтобы проверить, была ли нажата кнопка выхода?Как то так:

setTimeout(
    function() {
        if(!logoutClicked) {
            $.doPost("http://mysite.com", {
                username: results.rows.item(0).username,
                password: results.rows.item(0).password
            });
        }
     }
, 5000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...