jQuery setInterval不起作用

时间:2011-07-06 09:22:19

标签: javascript jquery

这是我的代码:

$(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不起作用它会起作用!

任何帮助都非常感激。

由于

6 个答案:

答案 0 :(得分:2)

setInterval是一个原生的javascript函数,而不是jQuery函数。

清除后,尝试直接使用以下方式引用该功能:

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

这比让setInterval函数解释字符串更好。

答案 1 :(得分: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);
    }
});

答案 2 :(得分: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);

});

答案 3 :(得分:0)

试试这段代码示例:

var intervalId;

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

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

答案 4 :(得分:0)

您有两个选择:

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正在查找全局函数,但您的函数是本地函数。

希望这会有所帮助。干杯

答案 5 :(得分:0)

使用settimeout。因为无论代码完成,setinterval都会执行。 并从函数的最后一行调用settimeout。

setTimeOut("change_height", 500);