1

次のコードの場合:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
    var delay = (function() {
        var timer = 0;
        return function(callback, ms) {
            clearTimeout(timer);
            timer = setTimeout(callback, ms);
        };
    })();

    $("div#main").on("keyup", "input[name=code]", function() {
        delay($.getJSON("/some-url/", function(data) {
            console.log("here");
        }), 2000);
    });

});
</script>

<div id="main">
  <input name="code" />
</div>

javascriptエラーが発生する理由を誰かが知っていますか

Uncaught SyntaxError: Unexpected identifier

キーアップデータのサーバーへの送信を遅らせようとしています。

4

3 に答える 3

2

delay関数定義を渡すのを忘れたところです。イベントハンドラーを少し調整するだけです(他のすべては同じままです):

$("div#main").on("keyup", "input[name=code]", function() {
    delay(function() { // <-----
        $.getJSON("/some_url/", function(data) {
            console.log("here");
        });
    }, 2000);
});

例: http: //jsfiddle.net/f7F7c/

于 2012-08-15T16:29:50.807 に答える
0

私にはオートコンプリートのように見えますか?代わりにこれを試してください...

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
    var timer = 0;

    function runAjax() {
        $.getJSON("/some-url/", function(data) {
            console.log("here");
        });
    }

    $("div#main").on("keyup", "input[name=code]", function() {
        clearTimeout(timer);
        timer = setTimeout(runAjax, 2000);
    });

});
</script>

<div id="main">
  <input name="code" />
</div>
于 2012-08-15T16:25:56.050 に答える
0

これはまったく役に立ちますか:http://jsfiddle.net/ZYXp4/8/

これにより、キーアップアクションが実行されるたびに入力時に遅延が追加されるだけです。jsfiddleを試して、実際の動作を確認してください。遅延が発生した後、問題なくajax呼び出しを行うことができます^^

<input id="in" type="text"/>
<div id="out"></div>

var typingTimer;
var doneTypingInterval = 1000;

//on keyup, start the countdown
$('#in').keyup(function(){
    clearTimeout(typingTimer);
    if ($('#in').val) {
        typingTimer = setTimeout(function(){
            //do stuff here e.g ajax call etc....
             var v = $("#in").val();
             $("#out").html(v);
        }, doneTypingInterval);
    }
});
于 2012-08-15T16:27:23.293 に答える