【问题标题】:jQuery Bind event firing the eventjQuery Bind 事件触发事件
【发布时间】:2009-08-06 20:35:43
【问题描述】:

我正在调用下面的第一个函数来将第二个函数绑定到 onClick 事件。

奇怪的是调用第一个函数会触发第二个函数。

第一个函数中的 LinkName 参数是表 td 元素的名称 - 可能不相关。

function EnableExpand(LinkName, i) {
    $(LinkName).addClass("link-text");
    $(LinkName).bind("onclick", ExpandFrame(LinkName, i));
}

function ExpandFrame(lName, i) {
    $("#mapFrame" + i).attr({ height: 500, width: 800 });
}

【问题讨论】:

    标签: jquery events binding


    【解决方案1】:

    问题是 .bind() 的第二个参数应该是一个函数,但你正在调用一个函数。 JQuery 评估函数调用并尝试将结果绑定到单击事件。

    按照建议,通过将函数调用包装在匿名函数中,javascript 引擎会将包装函数绑定到事件,而不是评估其中的内容。

    $(LinkName).click( function () { ExpandFrame(LinkName, i) } );
    

    意识到使用以下代码等同于上面的代码可能会有所帮助。

    $(LinkName).click( function () { ExpandFrame(LinkName, i) }() );
    

    【讨论】:

      【解决方案2】:

      您需要传递一个在点击事件发生时将被调用的函数。按照您的方式,您立即调用该函数,并告诉 JQuery 调用从该函数返回的任何值。

      $(LinkName).bind("click", function () { ExpandFrame(LinkName, i); } );
      

      【讨论】:

        【解决方案3】:

        你不需要绑定。 .click 就可以了。

        $(LinkName).click( function () { ExpandFrame(LinkName, i) } );
        

        【讨论】:

          猜你喜欢
          • 2015-06-25
          • 2012-06-08
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 2016-03-14
          相关资源
          最近更新 更多