setTimeout не ожидает указанное количество миллисекунд - PullRequest
3 голосов
/ 24 февраля 2011

Я хотел бы, чтобы форма запускала отправку после нескольких секунд бездействия (используя событие onKeyup).

Мой код выглядит так:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Title</title>
    </head>
    <body>
        <form id="getJSONForm">
            <textarea rows="1" cols="10" onKeyUp="onKeyUp()"></textarea>
            <input type="submit" value="Submit" id="getJSON" />
        </form>

        <div id="result"  class="functions"></div>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            $.ajaxSetup ({
                cache: false
            });

            var timer;

            function onKeyUp() {
                stoper();
                timer = setTimeout ( $("#getJSONForm").submit(), 10000 ); 
            }

            function stoper() {
                clearTimeout(timer);
            }

            $("#getJSONForm").submit(function(){
                    $("#result").html("hello");
                    return false;
            });
        </script>
    </body>
</html>

Но... формы отправляются на каждое onKeyUp событие, которое кажется.Он не ждет, пока таймер достигнет указанных 10000 миллисекунд.Есть ли способ это исправить?

1 Ответ

7 голосов
/ 24 февраля 2011

Первый параметр setTimeout() должен быть функциональным объектом (или строкой, но вы не должны использовать это).Например:

timer = setTimeout(function () {
   $("#getJSONForm").submit();
}, 10000);

В настоящее время вы передаете значение $("#getJSONForm").submit() в setTimeout(), что, вероятно, не то, что вам нужно.

Кроме того, я бы рекомендовал использовать событие jQueryобработка вместо аргументов HTML.Это более элегантный, гибкий и простой в обслуживании.Вы можете сделать это следующим образом:

$('#getJSONForm textarea').keyup(function () {
   // the content of your onKeyUp() function goes here
});

Посмотрите документацию API по этой теме.

...