【发布时间】:2014-05-22 19:09:58
【问题描述】:
我正在 [在 jsfiddle 中] 尝试使用创建的函数将新创建的 TextNode 附加到下面 HTML 中的 <p>:
<button onclick="addTextNode('YES! ');">YES!</button>
<button onclick="addTextNode('NO! ');">NO!</button>
<button onclick="addTextNode('WE CAN! ');">WE CAN!</button>
<hr />
<p id="p1">First line of paragraph.</p>
这也是我的 javascript:
function addTextNode(text) {
var newtext = document.createTextNode(text),
p1 = document.getElementById("p1");
p1.appendChild(newtext);
}
这很好用。但是,当我尝试通过从标记中删除行为来使我的 javascript“不显眼”时,症结就会显现出来......
<button>YES!</button>
<button>NO!</button>
<button>WE CAN!</button>
<hr />
<p id="p1">First line of paragraph.</p>
然后使用循环将addEventListener 附加到每个<button> 元素,然后使用子TextNode 调用addTextNode:
function addTextNode(text) {
var newtext = document.createTextNode(text),
p1 = document.getElementById("p1");
p1.appendChild(newtext);
}
var btns = document.getElementsByTagName("button");
for(i = 0; i < btns.length; i++){
var button = btns[i];
button.addEventListener("click", addTextNode(button.innerHTML));
}
我的代码发生了两件奇怪的事情:
当 [jsfiddle's] Code Wrap 设置为 'no wrap - in head' 时,什么也没有发生。
但是,当 Code Wrap 设置为 'onLoad'、'onDomReady' 或 'no wrap - in body' 时,函数会在点击之前运行,我会得到 this。
谁能告诉我我错过了什么?
【问题讨论】:
标签: javascript for-loop event-handling addeventlistener