3

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それが思われるすべてのイベントで送信されます。タイマーが指定された10,000ミリ秒に達するのを待ちません。これを修正する方法はありますか?

4

1 に答える 1

7

の最初のパラメーターはsetTimeout()、関数オブジェクト (または文字列ですが、使用しないでください) である必要があります。このような:

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

$("#getJSONForm").submit()あなたは現在toの値を渡していますがsetTimeout()、これはおそらくあなたが望むものではありません。

それに加えて、HTML 引数の代わりに jQuery のイベント処理を使用することをお勧めします。はるかにエレガントで柔軟性があり、保守が容易です。次のように実行できます。

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

このトピックに関するAPI ドキュメントを参照してください。

于 2011-02-24T14:04:46.773 に答える