在文本框中使用JavaScript通过回车键触发按钮点击
技术背景
在网页开发中,常常会有这样的需求:当用户在文本框中输入内容后按下回车键,希望能触发一个按钮的点击事件,以执行相应的操作,如搜索、提交表单等。以下介绍多种实现该功能的方法。
实现步骤
jQuery实现
1 2 3 4 5 6 7 8
| $("#id_of_textbox").keyup(function(event) { if (event.keyCode === 13) { $("#id_of_button").click(); } });
|
示例代码:
1 2 3 4 5 6 7 8 9
| $("#pw").keyup(function(event) { if (event.keyCode === 13) { $("#myButton").click(); } });
$("#myButton").click(function() { alert("Button code executed."); });
|
HTML部分:
1 2 3 4
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> Username:<input id="username" type="text"><br> Password: <input id="pw" type="password"><br> <button id="myButton">Submit</button>
|
原生JavaScript实现
1 2 3 4 5 6 7 8 9 10 11
| document.getElementById("id_of_textbox") .addEventListener("keyup", function(event) { event.preventDefault(); if (event.keyCode === 13) { document.getElementById("id_of_button").click(); } });
|
示例代码:
1 2 3 4 5 6 7 8 9 10 11
| document.getElementById("pw") .addEventListener("keyup", function(event) { event.preventDefault(); if (event.keyCode === 13) { document.getElementById("myButton").click(); } });
function buttonCode() { alert("Button code executed."); }
|
HTML部分:
1 2 3 4
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> Username:<input id="username" type="text"><br> Password: <input id="pw" type="password"><br> <button id="myButton" onclick="buttonCode()">Submit</button>
|
内联事件处理方式
1 2 3 4 5 6 7 8 9 10 11
| <input type = "text" id = "txtSearch" onkeydown = "if (event.keyCode == 13) document.getElementById('btnSearch').click();" />
<input type = "button" id = "btnSearch" value = "Search" onclick = "doSomething();" />
|
封装函数方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <input type="text" id="txtSearch" onkeypress="return searchKeyPress(event);" /> <input type="button" id="btnSearch" Value="Search" onclick="doSomething();" />
<script> function searchKeyPress(e) { e = e || window.event; if (e.keyCode == 13) { document.getElementById('btnSearch').click(); return false; } return true; } </script>
|
将按钮设为提交元素
1 2 3 4 5 6 7 8
| <form> <input type = "text" id = "txtSearch" /> <input type = "submit" id = "btnSearch" value = "Search" onclick = "return doSomething();" /> </form>
|
注意:需要一个<form>
元素包含输入字段才能使此方法生效。
使用addEventListener
的另一种方式
1 2 3 4 5 6 7 8 9
| var go = document.getElementById("go"); var txt = document.getElementById("txt");
txt.addEventListener("keypress", function(event) { event.preventDefault(); if (event.keyCode == 13) { go.click(); } });
|
HTML部分:
1 2
| <input type = "text" id = "txt" /> <input type = "button" id = "go" />
|
现代JS使用keypress
和event.key === "Enter"
1 2 3 4 5 6
| const textbox = document.getElementById("txtSearch"); textbox.addEventListener("keypress", function onEvent(event) { if (event.key === "Enter") { document.getElementById("btnSearch").click(); } });
|
阻止表单默认提交行为
1 2 3 4
| <form onsubmit="Search();" action="javascript:void(0);"> <input type="text" id="searchCriteria" placeholder="Search Criteria"/> <input type="button" onclick="Search();" value="Search" id="searchBtn"/> </form>
|
YUI库实现
1 2 3 4 5
| Y.on('keydown', function() { if(event.keyCode == 13) { Y.one("#id_of_button").simulate("click"); } }, '#id_of_textbox');
|
Angular2实现
1
| <input (keyup.enter)="doSomething()" />
|
使用change
事件
1 2 3
| document.getElementById("txtSearch").addEventListener('change', () => document.getElementById("btnSearch").click() );
|
可复用的原生JS解决方案
1 2 3 4 5 6 7 8 9 10 11
| <input type="text" id="message" onkeypress="enterKeyHandler(event,'sendmessage')" /> <input type="button" id="sendmessage" value="Send"/>
<script> function enterKeyHandler(e, button) { e = e || window.event; if (e.key == 'Enter') { document.getElementById(button).click(); } } </script>
|
最佳实践
- 兼容性:在使用
keyCode
时,要注意不同浏览器的兼容性问题,尽量使用现代的event.key === "Enter"
来判断回车键。 - 代码复用:将回车键触发按钮点击的逻辑封装成函数,方便在多个地方复用。
- 避免默认行为:在处理回车键事件时,使用
event.preventDefault()
阻止默认行为,防止不必要的表单提交。
常见问题
- 表单提交问题:如果在表单中使用回车键触发按钮点击,可能会导致表单默认提交。可以通过设置表单的
action="javascript:void(0);"
或在事件处理函数中调用event.preventDefault()
来解决。 - 浏览器兼容性问题:不同浏览器对
keyCode
和event.key
的支持可能不同,要进行充分的测试。例如,旧版本的IE浏览器可能需要特殊处理。