为什么我的点击处理程序在文档就绪时运行?

时间:2012-01-28 03:08:04

标签: javascript jquery

好的,我已经为div点击设置了一个处理程序,但出于某种原因,它会在document.ready上触发,我无法弄清楚原因。这是我的代码:

function statusCallback(status){
    //THIS IS THE JSONP CALLBACK RECEIVED FROM THE SERVER
    if(status.title==null){
        $('#core').attr('class','play');
        $('#button').animate({marginLeft:'350px'},2000,'easeOutCubic',function(){
            $('#button').click(initialBinder());
        });
    }else{

    }
}
function initialBinder(){
    $('#button').unbind('click');
    $('#core').attr('class','load');
    $('#button').animate({marginLeft:'0px'},2000,'easeOutCubic',function(){
        $.ajax({
            url:'http://24.182.211.76/status.php',
            crossDomain:true,
            dataType:'jsonp'
        });
    });
}
$(document).ready(function(event){
    $('#button').click(initialBinder());
});

3 个答案:

答案 0 :(得分:10)

变化:

$('#button').click(initialBinder());

为:

$('#button').click(initialBinder);

前者实际上会调用函数,而不是返回一个函数指针。

也许这一点代码可以澄清差异:

function foo(x, y) //I'm function foo, I add two numbers like a boss
{
   return x + y;
};

var x = foo(1,1); //x is 2 because we called the function
var y = foo; //y is a reference to function foo, no parentheses
var z = y(1,1); //z is 2 because we called foo through reference y
document.write('x = ' + x + '<br />z = ' + z);

答案 1 :(得分:2)

$('#button').click(initialBinder);

您没有将函数作为回调引用,而是调用函数。

答案 2 :(得分:0)

尝试从绑定语句中删除parens,如下所示:

$(document).ready(function(event){
    $('#button').click(initialBinder);
});

正在发生的是该函数正在执行而不是作为参数传递。