簡體   English   中英

事件監聽器不起作用

[英]event listener does not work

任何想法為什么這不起作用。

單擊時按是按鈕可以使用一次 - 否按鈕不起作用

 function $(x) { return document.getElementById(x); } var glob = 0; function new_index() { glob += 1; return "d" + glob; } function play() { say("Hello is JS Fun?"); response("No", function() { say("Oh dear") }); response("Yes", function() { say("Great:"); }); } function say(x) { $("txt").innerHTML += x; } function response(Txt, Fun) { var n = new_index(); var s = "<button id='" + n + "'>" + Txt + "</button>"; say(s); var xx = $(n); // xx.onclick=Fun; xx.addEventListener("click", Fun); } play(); 
 <div id="txt"></div> 

這是因為每次設置innerHTML時,它都不會像您想象的那樣添加,它會將innerHTML設置為一個新值,並通過附加舊事件偵聽器來刪除舊元素。

正如其他人所提到的,代碼中的主要問題是你在后續的innerHTML調用中丟失了事件綁定 - 沒有停止工作,因為它是在Yes之后。 當“是”附加文本時,它會自行中斷。

使用DOM時,最好創建元素而不是改變HTML文本(使用innerHTML )。 對於你的按鈕,它意味着你不必(1)創建一個帶有ID的按鈕,然后(2)找到按鈕。 使用createElement您可以引用它。

 function $(x) { return document.getElementById(x); } var glob = 0; function new_index() { glob += 1; return "d" + glob; } function play() { say(text("Hello is JS Fun?")); response("No", function() { say(text("Oh dear")); }); response("Yes", function() { say(text("Great:")); }); } function text(String) { var node = document.createElement("span"); node.innerHTML = String; return node; } function say(x) { $("content").appendChild(x); } function response(Txt, Fun) { var button = document.createElement("button"); button.innerHTML = Txt; button.addEventListener("click", Fun); say(button); } play(); 
 <div id="content"></div> 

事件處理程序在$("txt").innerHTML += x;上丟失$("txt").innerHTML += x;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM