【问题标题】:Event listener firing too early when parameters are passed传递参数时事件侦听器过早触发
【发布时间】:2012-06-01 06:36:24
【问题描述】:

我将一些参数传递给一个 javascript 函数,该函数构建一个供用户填写的表单。在这些参数中,还有两个函数包含在一个单独的类中,它们处理表单的保存或取消。 cancel 函数需要两个参数,用于确定要构建的实体列表。问题在于参数。在表单构建功能中,如果我将取消功能附加到新创建的取消按钮而不给它任何参数,则功能按钮可以正常工作,但由于缺少参数而构建一个空列表。但是,如果我使用参数附加该函数,则该函数会在创建页面而不是单击按钮时立即触发。我尝试以几种不同的方式附加监听器,包括 javascript、jquery 甚至 yahoo.util。当在其他实例中使用参数调用取消函数时,一切都在取消函数中正常工作。关于为什么在传递参数时函数会提前触发的任何想法?

这里是一些我附加了偶数监听器的不同方式的 sudo 代码。

function buildform(formData, saveFunction, CancelFunction, p1, p2){
      $("#cancelButton").live("click", cancelFunction(p1, p2);
      YAHOO.util.Event.on("cancelButton", "click", cancelFuntion(p1, p2));
      cancelButton.setAttribute("onClick",cancelFunction(p1, p2);
}

【问题讨论】:

  • 您应该始终使用on,而不是使用已弃用的live。

标签: javascript jquery parameter-passing event-listener


【解决方案1】:

你必须将你的方法调用包装在函数块中,否则它们会被立即评估:

$("#cancelButton").live("click", function () { cancelFunction(p1, p2); });

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 2015-12-18
    • 2013-05-19
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多