传递参数时事件监听器过早触发

时间:2012-05-25 16:55:08

标签: javascript jquery parameter-passing event-listener

我将一些参数传递给一个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);
}

1 个答案:

答案 0 :(得分:3)

您必须在函数块中包装方法调用,否则会立即对它们进行求值:

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