jQuery:在动态添加DOM元素时尝试将函数挂钩到onclick,但它会立即执行该函数

MGO*_*wen 4 jquery onclick

我正在动态地使用jQuery(我的意思是在运行时)将span元素添加到我的页面的DOM中:

// create add task button
$(document.createElement("span"))
    .attr({ id: activityNameHyphened + "-NewButton", name: activityNameHyphened + "-NewButton" })
    .addClass("smallButton")
    .appendTo(cell1)
    .click(CreateTaskRow(ActivityName));
Run Code Online (Sandbox Code Playgroud)

问题是最后一行:我认为它会添加CreateTaskRow(ActivityName)作为span的onclick事件的处理程序,就像:

<span onclick="CreateTaskRow(ActivityName);"></span>
Run Code Online (Sandbox Code Playgroud)

这就是我想要的 - 但是当我在浏览器中运行它时,我可以看到使用调试器,在这一行它会立即运行该函数.

如果我可以更清楚:CreateTaskRow()在我尝试将其添加到onclick时运行(我希望它仅在用户实际单击span时运行).

知道我做错了什么吗?(如果我的问题不够明确,请告诉我)

mol*_*olf 9

您实际上正在调用该函数并将结果传递给.click()事件处理程序.尝试使用闭包(匿名函数):

.click(function() {
    CreateTaskRow(ActivityName);
});
Run Code Online (Sandbox Code Playgroud)

click事件被触发之前,关闭不会运行.