2011-07-06 22 views
2

が動作していない私のコードです:のjQueryのsetIntervalはここ

$(document).ready(function() { 
    var interval = setInterval("change_height()", 500); 
    var height; 

    function change_height() { 
     height = parseInt(window.location.hash); 
     $('#message_body').height(height); 
     alert(""); 
     clearInterval(interval); 
    } 
}); 

change_height()関数は単に呼び出されていない、まだ私はdocument.readyブロックの外側に置いた場合、それが動作する何らかの理由が、その後clearIntervalは機能しません!

ご迷惑をおかけして申し訳ございません。

+0

change_height'は 'ready'イベントハンドラにローカルのみである'ので、あなたはそれが動作しない「document.ready」 –

+0

の外で「間隔」VAR AND「change_height」関数を入れてみてくださいする必要がありますが、 'setInterval'に渡された文字列はグローバルスコープで評価されます。 @Alexanderが示唆するように、関数参照を直接渡します。もう1つの質問:最初の実行後にクリアすると、なぜ 'setInterval'を使うのですか?単純な 'setTimeout'で十分です。 –

答えて

2

のsetInterval

おかげで、ネイティブのJavaScript関数ではなくjQueryの関数です。それは晴れで

、ちょうど直接使用して関数を参照してみてください。

var interval = setInterval(change_height, 500); 
    // Note the lack of() which would execute the function 

これはのsetInterval関数は、文字列を解釈させるよりも優れています。

+1

+1それだけではなく、それを機能させる方法です。スコープの問題です。 –

+0

コメントは、私は好奇心旺盛だ、それは確かに、以下に迅速に説明することができます。 'のsetInterval(「change_height()」、500);'(window.change_height 'の関数を呼び出すために評価されるだろう)、'、しかし、この関数が存在しません。もう一つの可能​​な修正は、change_height()をグローバルスコープに移動することですが、これは悪い習慣であり、避けるべきです。意図したように 'setInterval(change_height、500)'を使うことは、2つの解決法の方が優れています。 –

+0

正確に。また、グローバルな名前空間の汚染を回避します。これらのメソッドに文字列を渡す理由は決してありません...あなたの答えに誰が投票したのか疑問に思います: - /(なぜ)。 –

1
$(document).ready(function() { 
    var interval = setInterval(function() { change_height(); }, 500); 
    var height; 

    function change_height() { 
     height = parseInt(window.location.hash); 
     $('#message_body').height(height); 
     alert(""); 
     clearInterval(interval); 
    } 
}); 
1

いけない機能の参照を渡す、のsetIntervalに文字列を渡す:

$(document).ready(function() { 
    var interval; 
    var height; 

    function change_height() { 
     height = parseInt(window.location.hash); 
     $('#message_body').height(height); 
     alert(""); 
     clearInterval(interval); 
    } 
    interval = setInterval(change_height, 500); 

}); 
0

は、このサンプルコードを試してみてください。

var intervalId; 

$(document).ready(function() { 
    intervalId = window.setInterval('sample.func1();', 500); 
}); 

var sample = { 
    func1: function() { 
     alert('test 1'); 
     window.clearInterval(intervalId); 
    } 
} 
0

あなたは2つの選択肢があります。

1)を削除しますかっこと引用符はsetInterval

setInterval(change_height, 500); 

OR 2)グローバルとしてあなたの関数を宣言します。

window.change_height = function() { 
    height = parseInt(window.location.hash); 
    $('#message_body').height(height); 
    alert(""); 
    clearInterval(interval); 
} 

あなたが"change_height()"を使用していたとき、setIntervalはグローバル関数を探していたので、これはですが、あなたの関数がローカルでした。

これが役に立ちます。乾杯

0

は、setTimeoutメソッドを使用します。 setintervalはコードに関係なく実行されるため、終了します。 関数内の最後の行からsettimeoutを呼び出します。

setTimeOut("change_height", 500);