Javascript onclick 函数是否立即调用(不是在单击时调用)?
Javascript onclick function is called immediately (not when clicked)?
我正在尝试创建一个 link,它看起来和感觉起来都像一个 <a>
标签项,但运行一个函数而不是使用 href。
当我尝试将 onclick 函数应用于 link 时,它会立即调用该函数,而不管 link 从未被单击过。此后任何点击 link 的尝试都会失败。
我做错了什么?
HTML
<div id="parent">
<a href="#" id="sendNode">Send</a>
</div>
Javascript
startFunction();
function secondFunction(){
window.alert("Already called!?");
}
function startFunction() {
var sentNode = document.createElement('a');
sentNode.setAttribute('href', "#");
sentNode.setAttribute('onclick', secondFunction());
//sentNode.onclick = secondFunction();
sentNode.innerHTML = "Sent Items";
//Add new element to parent
var parentNode = document.getElementById('parent');
var childNode = document.getElementById('sendNode');
parentNode.insertBefore(sentNode, childNode);
}
如您所见,我尝试了两种不同的方法来添加这个 onclick 函数,两种方法都具有相同的效果。
你想要.onclick = secondFunction
不 .onclick = secondFunction()
后者调用(执行)secondFunction
,而前者传递对 secondFunction
的引用以在 onclick
事件
上调用
function start() {
var a = document.createElement("a");
a.setAttribute("href", "#");
a.onclick = secondFunction;
a.appendChild(document.createTextNode("click me"));
document.body.appendChild(a);
}
function secondFunction() {
window.alert("hello!");
}
start();
您也可以使用 elem#addEventListener
a.addEventListener("click", secondFunction);
// OR
a.addEventListener("click", function(event) {
secondFunction();
event.preventDefault();
});
我正在尝试创建一个 link,它看起来和感觉起来都像一个 <a>
标签项,但运行一个函数而不是使用 href。
当我尝试将 onclick 函数应用于 link 时,它会立即调用该函数,而不管 link 从未被单击过。此后任何点击 link 的尝试都会失败。
我做错了什么?
HTML
<div id="parent">
<a href="#" id="sendNode">Send</a>
</div>
Javascript
startFunction();
function secondFunction(){
window.alert("Already called!?");
}
function startFunction() {
var sentNode = document.createElement('a');
sentNode.setAttribute('href', "#");
sentNode.setAttribute('onclick', secondFunction());
//sentNode.onclick = secondFunction();
sentNode.innerHTML = "Sent Items";
//Add new element to parent
var parentNode = document.getElementById('parent');
var childNode = document.getElementById('sendNode');
parentNode.insertBefore(sentNode, childNode);
}
如您所见,我尝试了两种不同的方法来添加这个 onclick 函数,两种方法都具有相同的效果。
你想要.onclick = secondFunction
不 .onclick = secondFunction()
后者调用(执行)secondFunction
,而前者传递对 secondFunction
的引用以在 onclick
事件
function start() {
var a = document.createElement("a");
a.setAttribute("href", "#");
a.onclick = secondFunction;
a.appendChild(document.createTextNode("click me"));
document.body.appendChild(a);
}
function secondFunction() {
window.alert("hello!");
}
start();
您也可以使用 elem#addEventListener
a.addEventListener("click", secondFunction);
// OR
a.addEventListener("click", function(event) {
secondFunction();
event.preventDefault();
});