2

私はこれまで使ったことがなくsetInterval()、これに頭を悩ませることができないので、アドバイスが必要です。ある種のイベントリスナーを作りたいです。

たとえば、選択メニューのオプションの長さを確認したいが、サードパーティのスクリプトがAjaxリクエストを介して選択メニューのコンテンツを入力するとします。残念ながら、サードパーティのスクリプトに触れることは許可されていないので、コンテンツが追加されるのを待ってリッスンし、そのタスクを実行できる関数を用意することについて考えました。

私のウェブページに次のようなものがあるとしましょう。

<select size="7" id="cat"> </select>

onloadこれは次のようなオプションでいっぱいになります:

<option value="Category 1">Category 1</option>
<option value="Category 2">Category 2</option>
<option value="Category 3">Category 3</option>
<option value="Category 4">Category 4</option>

オプションの長さをリッスンするonLoad(正確には$(document).ready())もロードする関数を追加し、ゼロより大きい場合は何かを実行したい(この例ではアラート) )。

function checkLen(){

    if($('#cat option').size() > 0){
        return true;
       }else{
        return false;
       }

}


function takeDefault(){

    var ourInterval = setInterval("checkLen();", 1000);

       if(ourInterval == true){
           alert("Okay I will do something now");
           clearInterval(ourInterval);

       }

        // Now I will perform some other tasks
}

$(document).ready(function() {
   takeDefault();
});

私が本当に理解していないので、これはうまくいきません。if(checkLen == True)条件は1回だけ実行され、選択メニューにデータが入力されるまで1秒ごとに実行する必要があります。

4

2 に答える 2

4

簡単にするために、さまざまな要素を使用しましたが、考え方は同じです。

var listen = setInterval(function () {
    if ($('input').val().length > 0) {
        console.log('has changed, should call callback');
        clearInterval(listen);
    }
}, 1000);​

http://jsfiddle.net/suKCp/

あなたの場合、これは(テストされていない)のようなものでなければなりません:

function takeDefault(){
  var ourInterval = setInterval(function () {
    if ($('#cat option').size() > 0) {
      alert("Okay I will do something now");
      clearInterval(ourInterval);
    }
  }, 1000);

  // Now I will perform some other tasks
}
于 2012-05-04T12:32:35.140 に答える
0

ourIntervalによって実行される関数の戻り値ではありませんsetInterval。これは、間隔をキャンセルするために使用できる値です。

次に、間隔を置いてチェックする代わりに、入力にリスナーを登録し、入力が変更されたときに何かを実行してみませんか?

何かのようなもの

http://jsfiddle.net/BskPK/

于 2012-05-04T12:28:17.200 に答える