点击按钮更改文本

83

当我点击myButton1按钮时,我希望该值从Open Curtain更改为Close Curtain
HTML:

<input onclick="change()" type="button" value="Open Curtain" id="myButton1"></input>

Javascript:

function change();
{
    document.getElementById("myButton1").value="Close Curtain";
}

当前按钮显示为“打开窗帘”,我想将其更改为“关闭窗帘”,这样正确吗?

19个回答

81
如果我理解你的问题正确,你想在“打开帘子”和“关闭帘子”之间切换--如果它关闭了就切换到“打开帘子”,反之亦然。 如果是这样,那么下面的代码可以实现。
function change() // no ';' here
{
    if (this.value=="Close Curtain") this.value = "Open Curtain";
    else this.value = "Close Curtain";
}

请注意,在change函数内部你不需要使用document.getElementById("myButton1"),因为它被调用在myButton1上下文中——什么是上下文,当你阅读有关JS的书籍时就会明白。

更新:

我错了。就像我之前所说的那样,this不会指向元素本身。你可以使用这个:

function change() // no ';' here
{
    var elem = document.getElementById("myButton1");
    if (elem.value=="Close Curtain") elem.value = "Open Curtain";
    else elem.value = "Close Curtain";
}

6
不是用 'onClick',Parth。你需要传递一个对象的引用:onClick="change(this)",然后在JS中使用:function change(button) { print button.value; } - Sp4cecat
在Chrome上,@ParthThakkar,“this”确实被设置为按钮。 - Alnitak
可怕!我刚在Chrome上尝试了一下,它没有起作用。它引用了DOMWindow。 - Parth Thakkar
为什么不从事件对象的目标属性中获取元素名称,该事件对象将由onClick(或调用change()的任何其他事件)传递? - Lee Goddard
10
我遇到了一些问题(后来发现只是语法错误),这就是我发现能够解决问题的方法:使用this.innerHTML =。但是在Firefox v28中,使用this.value对我没有用。这是针对实际按钮元素,而不是输入按钮。 - Chris Middleton
显示剩余2条评论

44

在使用<button>元素(或其他元素)的时候,设置'value'不会改变文本,但是innerHTML会。

var btn = document.getElementById("mybtn");
btn.value = 'my value'; // will just add a hidden value
btn.innerHTML = 'my text';

在控制台打印输出:

<button id="mybtn" class="btn btn-primary" onclick="confirm()" value="my value">my text</button>


3
这肯定对我有帮助。效果很好。在我看来,这是所有答案中最简单、最直接的回答。innerHTML会改变按钮的可见文本。value=""不可见,只存储隐藏数据。谢谢老兄。 - Micha

15

看起来这只是一个简单的打字错误:

  1. 在change()函数声明中删除分号。
  2. 在myButton1声明前添加引号。

更正后的代码:

<input onclick="change()" type="button" value="Open Curtain" id="myButton1" />
...
function change()
{
    document.getElementById("myButton1").value="Close Curtain"; 
}

一种更快更简单的解决方案是将代码包含在按钮中,并使用关键字“this”来访问按钮。

<input onclick="this.value='Close Curtain'" type="button" value="Open Curtain" id="myButton1" />

12

有很多种方法。这种方法在所有浏览器中都可以使用,而且您不必再使用document.getElementById,因为您将元素本身传递给函数。

<input type="button" value="Open Curtain" onclick="return change(this);" />

<script type="text/javascript">
function change( el )
{
    if ( el.value === "Open Curtain" )
        el.value = "Close Curtain";
    else
        el.value = "Open Curtain";
}
</script>

6
这段代码对我起作用了。
  var btn = document.getElementById("your_btn_id");
    if(btn.innerText=="show"){
       btn.innerText="hide";
      }
    else{
      btn.innerText="show";
      }

在我的情况下,使用value属性不起作用。


5
将此功能添加到脚本中。
function myFunction() {

                var btn = document.getElementById("myButton");

                if (btn.value == "Open Curtain") {
                    btn.value = "Close Curtain";
                    btn.innerHTML = "Close Curtain";
                }
                else {
                    btn.value = "Open Curtain";
                    btn.innerHTML = "Open Curtain";
                }

            }

并编辑按钮

<button onclick="myFunction()" id="myButton" value="Open Curtain">Open Curtain</button>

3
如果你更喜欢在HTML标记之外(在JavaScript中)绑定事件,你可以这样做:

document.getElementById("curtainInput").addEventListener(
  "click",
  function(event) {
    if (event.target.value === "Open Curtain") {
      event.target.value = "Close Curtain";
    } else {
      event.target.value = "Open Curtain";
    }
  },
  false
);
<!doctype html>
<html>
<body>
  <input 
         id="curtainInput" 
         type="button" 
         value="Open Curtain" />
</body>

</html>


2
我知道这是一篇旧文章,但有一个选项可以在函数调用中发送元素id:
<button id='expand' class='btn expand' onclick='f1(this)'>Expand</button>
<button id='expand' class='btn expand' onclick='f1(this)'>Expand</button>
<button id='expand' class='btn expand' onclick='f1(this)'>Expand</button>
<button id='expand' class='btn expand' onclick='f1(this)'>Expand</button>


function f1(objButton)
    {
        if (objButton.innerHTML=="EXPAND") objButton.innerHTML = "MINIMIZE";
        else objButton.innerHTML = "EXPAND";
    }

1

这对我很有帮助。我有多个按钮,我想切换输入值文本从“添加范围”到“删除范围”。

<input type="button" onclick="if(this.value=='Add Range') { this.value='Remove Range'; } else { this.value='Add Range'; }" />

1

您在id=上缺少一个开头引号,并且在函数声明后有一个分号。此外,输入标签不需要关闭标签。

这样可以正常工作:

<input onclick="change()" type="button" value="Open Curtain" id="myButton1">

<script type="text/javascript">
function change()
{
document.getElementById("myButton1").value="Close Curtain";
}
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接