Wil*_*elm 7 javascript for-loop event-handling addeventlistener
我正在尝试[在jsfiddle]中创建一个函数来将新创建的函数追加TextNode
到<p>
下面的HTML中:
<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>
Run Code Online (Sandbox Code Playgroud)
这是我的javascript:
function addTextNode(text) {
var newtext = document.createTextNode(text),
p1 = document.getElementById("p1");
p1.appendChild(newtext);
}
Run Code Online (Sandbox Code Playgroud)
这很好用.然而,当我试图通过从标记中删除行为来使我的javascript"不引人注目"时,症结就会显现出来......
<button>YES!</button>
<button>NO!</button>
<button>WE CAN!</button>
<hr />
<p id="p1">First line of paragraph.</p>
Run Code Online (Sandbox Code Playgroud)
然后利用一个循环附加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));
}
Run Code Online (Sandbox Code Playgroud)
我的代码发生了两件奇怪的事情:
当[jsfiddle的] Code Wrap设置为'no wrap-in head'时,没有任何反应.
但是,当Code Wrap设置为'onLoad','onDomReady'或'no wrap-in body'时,该函数在点击之前运行,我得到了这个.
有人能告诉我我错过了什么吗?
use*_*654 10
问题的根源在于:
button.addEventListener("click", addTextNode(button.innerHTML))
Run Code Online (Sandbox Code Playgroud)
您正在执行该函数而不是将其传递给事件侦听器.相反,通过引用传递函数,然后在函数内部获取innerHTML.
function addTextNode() {
var newtext = document.createTextNode(this.innerHTML),
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6438 次 |
最近记录: |