HOWTO · JavaScript

JavaScript 更改按钮文本

本教程展示了如何使用 JavaScript 更改按钮文本,并演示了使用 jQuery 更改按钮文本。

本页内容

要用 JavaScript 更改按钮文字,请对 <input type="button"> 或 <input type="submit"> 设置 value,对 <button> 设置 textContent。可以在页面初始化时设置,也可以在悬停或点击事件处理程序中设置。jQuery 提供了对应的 .val() 和 .text() 方法。

下方的浏览器示例是尚未执行的页面源码,没有记录的运行输出。将每个 HTML 示例分别保存为一个文件,即可在浏览器中尝试相应的交互。

JavaScript 在页面加载时更改按钮文字

将脚本放在这些元素之后,确保 JavaScript 选择它们之前,元素已经存在。页面初始化时,会把两个 input 按钮的标签从 Update 改为 Remove,并把两个 button 的标签改为 Hide Result:

本节中的代码以及显示的标签或输出仍为英文。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Change labels on load</title>
</head>
<body>
  <input id="loadInput" type="button" value="Update">
  <input id="loadSubmit" type="submit" value="Update">
  <button id="loadButton" type="button">Show Result</button>
  <button id="loadSubmitButton" type="submit">Submit Result</button>

  <script>
    document.querySelector('#loadInput').value = 'Remove';
    document.querySelector('#loadSubmit').value = 'Remove';
    document.querySelector('#loadButton').textContent = 'Hide Result';
    document.querySelector('#loadSubmitButton').textContent = 'Hide Result';
  </script>
</body>
</html>

<input> 是空元素,没有子内容;它显示的按钮标签来自 value。虽然它继承了与文本相关的 DOM 属性,但设置这些属性不会改变显示的标签。<button> 显示的是其子内容;它的 value 用途不同,例如可以用于提交表单数据。

要设置普通按钮标签,textContent 会插入纯文本。innerText 处理的是渲染后的文本,并受样式影响;读取它可能需要进行布局计算。innerHTML 会解析 HTML 标记,因此插入不可信字符串可能带来注入漏洞。这两个文本属性都不会把赋给它们的字符串解析为 HTML,但这并不意味着任何用法都绝对安全,也不意味着它们总是最快。有关这些属性的更多背景,请参阅现有的属性对比。

替换按钮的整个 textContent 也会移除它的子元素。如果按钮中包含图标,可以把标签放在单独的 <span> 中,并只更新该 span。

如果将脚本移到文档的 head 中,请使用带 defer 的外部脚本,或等待 DOMContentLoaded 事件。querySelector() 会返回第一个匹配项;若没有匹配元素,则返回 null。如果赋值没有生效,请检查选择器和脚本执行时机。

JavaScript 在鼠标悬停时更改按钮文字

使用 mouseover 在指针移入时更改标签,并使用 mouseout 恢复原标签。背景从红色变为绿色的效果由 CSS 处理:

本节中的代码以及显示的标签或输出仍为英文。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Change a label on hover</title>
  <style>
    #hoverButton { background-color: red; }
    #hoverButton:hover { background-color: green; }
  </style>
</head>
<body>
  <button id="hoverButton" type="button">Hide Result</button>

  <script>
    const hoverButton = document.querySelector('#hoverButton');
    hoverButton.addEventListener('mouseover', function () {
      this.textContent = 'Show Result!';
    });
    hoverButton.addEventListener('mouseout', function () {
      this.textContent = 'Hide Result';
    });
  </script>
</body>
</html>

addEventListener() 用于注册回调函数,本身不会触发事件。在这里使用的普通函数回调中,this 指向注册了监听器的按钮。初始标签是 Hide Result,悬停时显示的标签是 Show Result!。本节示例中的代码和显示标签保持原样,因此标签仍为英文。

在元素与其后代之间移动时,这些事件也可能触发。如果按钮包含嵌套内容,可以考虑使用 mouseenter 和 mouseleave。悬停操作依赖指针设备,因此应确保不悬停时也能看到重要说明。

JavaScript 在点击时更改按钮文字

这个 input 按钮的初始标签是 Hide Result。点击处理程序通过唯一 ID 选中元素,并在 Show Result 和 Hide Result 之间切换其 value:

本节中的代码以及显示的标签或输出仍为英文。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Toggle a button label</title>
</head>
<body>
  <input id="clickInput" type="button" value="Hide Result">

  <script>
    function nextButtonText(currentText) {
      return currentText === 'Hide Result' ? 'Show Result' : 'Hide Result';
    }

    function changeText() {
      const element = document.getElementById('clickInput');
      element.value = nextButtonText(element.value);
    }

    document.getElementById('clickInput').addEventListener('click', changeText);
  </script>
</body>
</html>

getElementById() 接收不带 CSS # 前缀的 ID 字符串。处理程序使用严格相等比较来选择下一个标签。对于 <button>,应改为读取并设置 textContent。单独更改标签不会显示或隐藏结果内容;如有需要,应另外添加相应行为。

下面的独立 JavaScript 示例使用 Node.js 演示同一个标签选择函数。已有记录显示,该函数运行后产生了下方所示的输出:

function nextButtonText(currentText) {
  return currentText === 'Hide Result' ? 'Show Result' : 'Hide Result';
}

let label = 'Hide Result';
label = nextButtonText(label);
console.log(label);
label = nextButtonText(label);
console.log(label);
Show Result
Hide Result

这次执行只测试了独立的标签选择函数。浏览器 DOM 事件和 jQuery 交互仍未执行。

使用 jQuery 更改 JavaScript 按钮文字

对 <button> 使用 .text(),对 input 按钮使用 .val()。这个尚未执行的浏览器示例要求先加载 jQuery,再注册事件处理程序。示例保留了源文章中的 jQuery 1.7.1 CDN URL 作为演示依赖;这里没有检查该 URL 和版本是否可用,或是否适合你的项目。

本节中的代码以及显示的标签或输出仍为英文。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Change labels with jQuery</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
  <button id="jqueryButton" type="button">Hide Result</button>
  <input id="jqueryInput" type="button" value="Show">

  <script>
    $('#jqueryButton').on('click', function () {
      $(this).text('Show Result').css('background-color', 'green');
    });
    $('#jqueryInput').on('click', function () {
      $(this).val('Hide').css('background-color', 'yellow');
    });
  </script>
</body>
</html>

点击 button 会将其文字设为 Show Result,并把背景设为绿色。点击 input 会将其标签设为 Hide,并把背景设为黄色。这些处理程序设置的是固定标签,而不是在标签之间切换。.css() 只改变外观,不会更改标签。

.html() 也可以替换按钮内容,但它会解析标记;如果只需要设置文本标签,请使用 .text()。.val() 直接表达了设置 input 按钮标签的用途,不需要冗余地调用 .attr() 和 .prop(),也不必处理依赖版本的替代写法。现有的 jQuery HTML 和 CSS 方法参考提供了更多背景信息。