简体   繁体   English

使用JavaScript单击时更改按钮上的文本

[英]Change text on button when clicked with JavaScript

I'm trying to change the text of a button when it's pressed with JavaScript. 我试图用JavaScript按下按钮时更改其文本。 Should be very straightforward, however, it's not working. 应该很简单,但是,它不起作用。 Can anyone explain? 谁能解释? Here's my code: 这是我的代码:

 function changeInnerHTML() { var buttonValue = document.getElementById('elementTEST').innerHTML; var buttonValueInnerHTMLBegin = '<p id="elementTEST">'; var buttonValueInnerHTMLEnd = '</p>'; alert("buttonValue = " + typeof(buttonValue)); // -> "string" if (buttonValue == "Online") { alert("turn off"); // -> "turn off" buttonValue = buttonValueInnerHTMLBegin + "Offline" + buttonValueInnerHTMLEnd; // -> DOESN'T CHANGE ANYTHING alert("turned off"); // -> "turned off" } else if (buttonValue == "Offline") { buttonValue = "Online"; } else { alert("There's a problem"); } } 
 <div class="containerTEST"> <div class="divTEST" onclick="changeInnerHTML()"> <p id="elementTEST">Online</p> </div> </div> 

I have run this both with and without the "buttonValueInnerHTMLBegin/End" variables being included, and I get the same result. 无论是否包含“ buttonValueInnerHTMLBegin / End”变量,我都可以运行此命令,并且得到相同的结果。

I get the alerts (shown as comments in the code), but the text/innerHTML doesn't change. 我收到警报(在代码中显示为注释),但是text / innerHTML不变。

Thanks for any help! 谢谢你的帮助!

它不是参考,您必须在最后直接设置它:

document.getElementById('elementTEST').innerHTML = buttonValue

try this: 尝试这个:

 var buttonValue = document.getElementById('elementTEST');  
    function changeInnerHTML(){
        if (buttonValue.innerHTML == "Online")
            buttonValue.innerHTML= "Offline";                  
        else if (buttonValue.innerHTML == "Offline") 
            buttonValue.innerHTML = "Online";
    }

codepen: example Codepen: 示例

  • There's absolutely no reason to change the HTML. 绝对没有理由更改HTML。 Change only the textContent 仅更改textContent
  • (Use Element.innerHTML = "bla" to set a new inner HTML) (使用Element.innerHTML = "bla"设置新的内部HTML)
  • Use Element.textContent = "bla" to set a new text content 使用Element.textContent = "bla"设置新的文本内容
  • Don't use inline JS onclick - it's discouraged for code maintainability reasons 不要使用内联JS onclick出于代码可维护性的考虑,建议不要使用它
  • Use a <button> for semantic reasons and accessibility 出于语义原因和可访问性,请使用<button>

Here's a simpler version 这是一个简单的版本

 [...document.querySelectorAll(".toggleOnline")].forEach( el => el.addEventListener("click", () => { el.textContent = /online/i.test(el.textContent) ? "Offline" : "Online"; }) ); 
 .toggleOnline { border: none; border-radius: 0; background: #ddd; padding: 8px 16px; } 
 <button class="toggleOnline" type="button" aria-live="assertive" aria-atomic="true"> Online </button> 

Now you can also tab your element and use Spacebar or Enter to toggle your button. 现在,您还可以选择元素并使用空格键Enter键切换按钮。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM