1

ユーザーがページを更新する頻度を選択できるドロップダウンメニューを用意しようとしています。$(document).ready( ) に次のコードがあります。

$(".refreshInterval").change( setInterval( showDashboard(),parseFloat( $(".refreshInterval").val() )*60*1000) );

...ここで、refreshInterval は...

<select class="refreshInterval" value="1">
    <option value="0">Off</option>
    <option value="0.5" selected>30 sec</option>
    <option value="1">1 min</option>
    <option value="2">2 min</option>
    <option value="5">5 min</option>
</select>

アクセスshowDashboard()可能な機能です。ページの最初のロード時にshowDashboard()呼び出されます。ただし、ドロップダウン メニューを変更すると、jQueryから次のエラーが発生します。

Uncaught TypeError: Object 166 has no method 'apply' 

何か案が?

4

4 に答える 4

4

コードをより明確な方法で記述することをお勧めします (ワンライナーを行うのではなく)。この方法で構文エラーを見つけやすくなります。

解決策:(良くない、編集をチェックしてください!

$(".refreshInterval").change(function() {    
    var interval = parseFloat( $(this).val() ) * 60 * 1000;
    setInterval(showDashboard(), interval) 
});
​

あなたが行方不明だった

 function() { }

編集 - - - -

ごめん !置いた

setInterval(showDashboard(), interval)

だったはず

setInterval(showDashboard, interval);

正しい完全なコードは次のとおりです。

 ref = setInterval(showDashboard, 1000) 

$(".refreshInterval").change(function() {    
    var interval = parseFloat( $(this).val() ) * 60 * 1000;
    clearInterval(ref);
    console.log("New Interval: " + interval);
    if (interval > 0) {
        ref = setInterval(showDashboard, interval)     
    }
});


function showDashboard() {
    console.log(Math.random());
}

​

そしてjsFiddle:http://jsfiddle.net/xkj43/3/

于 2012-10-11T17:25:25.337 に答える
1

これを試して:

$(".refreshInterval").change(function(){

setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000)

});
于 2012-10-11T17:10:29.537 に答える
1

イベントに関数を渡す必要があります。ここでメソッドを渡しています。

これもTry thisshowDashboard() に変更showDashboard

$(".refreshInterval").change(function(){    
      setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000))
  });
于 2012-10-11T17:10:57.247 に答える
0

関数を渡す必要があることを指摘する他の回答setIntervalは正しいです。

ただし、古い間隔を消去せずに変更呼び出しごとに新しい間隔を設定しているため、誰かが「1」を選択してから「5」を選択すると、showDashboard5 分ごとに 6 回の呼び出しが行われます。setInterval間隔 ID を取得し、新しい呼び出しの前にそれをクリアする必要があります。

$(function() {
    var dashboardRefreshInterval;
    $(".refreshInterval").change(function(){
           clearInterval(dashboardRefreshInterval);
           dashboardRefreshInterval = setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000))   
     }); 
}
于 2012-10-11T17:22:01.770 に答える