Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Onclick事件触发按钮的onload_Javascript_Jquery_Html_Javascript Events - Fatal编程技术网

Javascript Onclick事件触发按钮的onload

Javascript Onclick事件触发按钮的onload,javascript,jquery,html,javascript-events,Javascript,Jquery,Html,Javascript Events,我有一个div,我想在它后面附加一个用JS创建的按钮,JS定义ID、onclick和文本。除了页面加载时而不是单击时的onclick事件触发器外,其他一切都正常工作。检查时,甚至没有onclick属性 以下是一个例子: 函数createEditButton(num){ var btn=document.createElement(“按钮”); btn.onclick=myFunc(); btn.type=“按钮”; btn.innerText=“编辑”; btn.id=“编辑按钮”+num;

我有一个
div
,我想在它后面附加一个用JS创建的按钮,JS定义ID、onclick和文本。除了页面加载时而不是单击时的onclick事件触发器外,其他一切都正常工作。检查时,甚至没有onclick属性

以下是一个例子:

函数createEditButton(num){
var btn=document.createElement(“按钮”);
btn.onclick=myFunc();
btn.type=“按钮”;
btn.innerText=“编辑”;
btn.id=“编辑按钮”+num;
返回btn;
}
函数myFunc(){
警报(“hi”);
}
document.getElementById('someDiv').appendChild(createEditButton(5))

这是b/c,您正在调用函数而不是引用它:

btn.onclick = myFunc(); /* <-- remove parens */

btn.onclick = myFunc;
btn.onclick=myFunc();/*
函数createEditButton(num){
var btn=document.createElement(“按钮”);
btn.onclick=myFunc;
btn.type=“按钮”;
btn.innerText=“编辑”;
btn.id=“编辑按钮”+num;
返回btn;
}
函数myFunc(){
警报(“hi”);
}
document.getElementById('someDiv').appendChild(createEditButton(5))

当注册
btn.onclick
作为点击回调时,您正在执行函数而不是分配它。您应该使用
addEventListener
方法来注册单击事件,而不是
onclick
,使用
addEventListener
的好处是,它可以轻松注册多个回调,而如果您将“onclick”值指定两次,第一个值将被替换

要将值传递给函数,可以使用
bind
函数<代码>绑定
将创建具有给定上下文和绑定参数的新函数。或者您可以简单地创建一个包装器函数,它将使用给定的参数执行回调函数

请参见下面的示例

函数createEditButton(num){
var btn=document.createElement(“按钮”);
btn.addEventListener('click',myFunc);
//使用Bind传递值
btn.addEventListener('click',myFuncWithVal.bind(btn,num));
//使用包装函数传递值
btn.addEventListener('click',函数(事件){
警报(“包装函数”);
myFuncWithVal(num);
});
btn.type=“按钮”;
btn.innerText=“编辑”;
btn.id=“编辑按钮”+num;
返回btn;
}
函数myFunc(){
警报(“hi”);
}
函数myFuncWithVal(val){
警报(val);
}
document.getElementById('someDiv').appendChild(createEditButton(5))

非常感谢,如果可以,我会接受你的答案。那么,如果我的函数有参数呢?如果函数有参数,你必须有一个包装函数,用特定参数调用该函数。没关系。您在这里所做的一切都是指您打算处理相关事件的函数(名称)。删除参数正是您想要的(b/c)参数使其成为函数调用(从而将该调用的结果指定为您的处理程序)--这不会影响传递给处理程序的任何参数。如果为True,则需要的参数将是未定义的或等于mouseeventargs。问题是您实际上通过创建按钮调用了该函数。您要做的只是委托该函数,以便设置onclick=myFunc;