3

onKeyUp を呼び出す JavaScript 関数の助けが必要です。これは Ajax 関数ですが、文字を記述するたびに関数が呼び出され、ページのパフォーマンスが低下し、毎回チェックされます。これはデータベースのユーザー チェックです。

私はこれを試しました:

 var timer;
 function chk_me(){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
}

しかし、検証関数にはパラメーターがあるため、渡すことができません。次のように関数を呼び出します。

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me();" minlegth="4" value=/> 

そうですか?私は何をすべきか?

それは私の最初の質問であり、皆さんがそれを理解してくれることを願っています

ありがとう、アルベルト

私は新しいので、別の回答ではできないので、解決策で質問を編集しました。私はこれを見つけます:http://bytes.com/topic/javascript/answers/451142-need-advice-acting-only-last-onkeyup-event-seriesそして最後の回答方法を使用してそれにいくつかのコードを追加してください、私はあなたに任せますコードは、それが最善の方法ではないと言っているようですが、機能するので、他の方法があれば感謝し、ここでそれを使用します:

var keyCount = 0;
var timeoutCount = 0;

function handleKeyUp() // keyup handler
{
keyCount++;
setTimeout("compareCounts()", 500);
}

function compareCounts()
{
var usuario = document.profileForm.usuario.value;
timeoutCount++;
if (keyCount == timeoutCount)
{
xajax_checaUsuario(usuario);
}
}

だから私はそのように変数を取り、それをより良くするための提案はありますか?

ありがとう

4

3 に答える 3

7

validateに直接渡すsetTimeoutのではなく、無名関数内から呼び出します。

var timer;
function chk_me(arg) {
    clearTimeout(timer);
    timer = setTimeout(function () {
        validate(arg);
    }, 1000);
}
于 2011-07-18T22:59:04.410 に答える
0

あなたの質問を正しく理解していれば、クロージャー内にパラメーターを含めることが必要だと思います。

var timer;
function chk_me(myparam) {

    clearTimeout(timer);
    var validate = function() {

       //do stuff with myparam
       var foo = myparam;

    }
    timer=setTimeout(validate,1000);
}

以前と同様に、1 秒待機しない限り、タイマーは以前の呼び出しがキャンセルされることを保証します。また、chk_me のスコープ内で検証を定義すると、ハンドルが setTimeout に渡された場合でも、ローカル変数 myparam が内部で表示されます。

于 2011-07-18T22:52:51.190 に答える
0

次のことができます

var timer;
 function chk_me(myparam){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
} 

JavaScript では、関数が定義されているスコープ内の任意の変数にアクセスできます。で、以下が使い方です。

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me('stringval');" minlegth="4" value=/>
于 2011-07-18T22:26:07.767 に答える