addEventListener для отправки события запускает функцию обработчика рано - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь выяснить, как запустить фрагмент кода через несколько секунд после того, как пользователь нажимает кнопку отправки в форме. Моя тестовая страница ожидает нужное количество времени и правильно выполняет кусок кода, но вместо ожидания события submit, похоже, запускается мой таймер при загрузке страницы. Кажется, я неправильно использую .addEventListener; кто-нибудь видит мою проблему? Я использую последнюю версию Firefox, а не IE6 или что-то подобное.

<html>
<head>
    <title>Listener Test</title>    
</head>
<body>
    <form id="travelInfo">
        Depart: <input type="text" name="depart" value="BWI" id="depart"><br />
        Arrive: <input type="text" name="arrive" value="LAX " id="arrive"><br />
        <input type="submit" name="submit" value="Send Form" id="Submit">
    </form>

    <script type="text/javascript">
        window.addEventListener('submit', timeFunction(), true);
        function timeFunction()
        {
            var t=setTimeout("handler()",3000);
        }
        function handler()
        {
            alert("Hello");
        }       
    </script>
</body>
</html>

1 Ответ

4 голосов
/ 19 января 2012

Заменить

window.addEventListener('submit', timeFunction(), true);

на

window.addEventListener('submit', timeFunction, true);

См. Разницу между вызовом функции и ссылкой на нее в моем другом ответе .

Кроме того, вместо выполнения

setTimeout("handler()", 3000);

, которое в основном будет равно eval'd, когда истечет время ожидания, вы можете передать ссылку на функцию handler непосредственно в setTimeout.Обратите внимание на отсутствие кавычек и скобок.

setTimeout(handler, 3000);
...