我有一个文本输入和一个按钮(见下文)。我如何使用JavaScript触发按钮的点击事件时,进入键按下文本框内?
在我的当前页面上已经有一个不同的提交按钮,所以我不能简单地将该按钮设置为提交按钮。并且,我只想让Enter键单击这个特定的按钮,如果它是从这个文本框中按下,没有其他。
<input type="text" id="txtSearch" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />
在jQuery中,以下代码可以工作:
$("#id_of_textbox").keyup(function(event) {
if (event.keyCode === 13) {
$("#id_of_button").click();
}
});
$(“#pw”).keyup(function(event) {
if (event.keyCode === 13) {
$(“#myButton”).click();
}
});
$(“#myButton”).click(function() {
警报(“按钮代码已执行。
});
<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script>
用户名:<输入 id=“用户名” 类型=“文本”><br>
密码: <输入 id=“pw” 类型=“密码”><br>
<按钮 id=“我的按钮”>提交</button>
或者在纯JavaScript中,以下代码可以工作:
document.getElementById("id_of_textbox")
.addEventListener("keyup", function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById("id_of_button").click();
}
});
document.getElementById(“pw”)
.addEventListener(“keyup”, function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById(“myButton”).click();
}
});
功能按钮代码()
{
警报(“按钮代码已执行。
}
<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script>
用户名:<输入 id=“用户名” 类型=“文本”><br>
密码: <输入 id=“pw” 类型=“密码”><br>
<button id=“myButton” onclick=“buttonCode()”>提交</button>
由于还没有人使用addEventListener,这里是我的版本。给定这些元素:
<input type = "text" id = "txt" />
<input type = "button" id = "go" />
我会使用以下方法:
var go = document.getElementById("go");
var txt = document.getElementById("txt");
txt.addEventListener("keypress", function(event) {
event.preventDefault();
if (event.keyCode == 13)
go.click();
});
这允许您分别更改事件类型和操作,同时保持HTML的整洁。
请注意,可能有必要确保它在<form>之外,因为当我将这些元素括在其中时,按Enter键提交了表单并重新加载了页面。我眨眼间就发现了。
附录:由于@ruffin的注释,我添加了缺少的事件处理程序和preventDefault,以允许这段代码(大概)也可以在表单中工作。(我将对此进行测试,然后删除括号中的内容。)
为了添加一个完全简单的JavaScript解决方案来解决@icedwater的表单提交问题,这里有一个完整的表单解决方案。
注意:这是针对“现代浏览器”,包括IE9+。IE8版本并不复杂,可以在这里学习。
小提琴:https://jsfiddle.net/rufwork/gm6h25th/1/
HTML
<body>
<form>
<input type="text" id="txt" />
<input type="button" id="go" value="Click Me!" />
<div id="outige"></div>
</form>
</body>
JavaScript
// The document.addEventListener replicates $(document).ready() for
// modern browsers (including IE9+), and is slightly more robust than `onload`.
// More here: https://stackoverflow.com/a/21814964/1028230
document.addEventListener("DOMContentLoaded", function() {
var go = document.getElementById("go"),
txt = document.getElementById("txt"),
outige = document.getElementById("outige");
// Note that jQuery handles "empty" selections "for free".
// Since we're plain JavaScripting it, we need to make sure this DOM exists first.
if (txt && go) {
txt.addEventListener("keypress", function (e) {
if (event.keyCode === 13) {
go.click();
e.preventDefault(); // <<< Most important missing piece from icedwater
}
});
go.addEventListener("click", function () {
if (outige) {
outige.innerHTML += "Clicked!<br />";
}
});
}
});
没有人注意到html属性“accesskey”已经有一段时间了。
这是一个没有javascript的方式来键盘快捷键的东西。
MDN上的accesskey属性快捷方式
故意这样使用的html属性本身就足够了,但是我们可以根据浏览器和操作系统改变占位符或其他指示符。该脚本是一个未经测试的草稿方法,以提供一个想法。您可能想要使用一个浏览器库检测器,比如小浏览器器
让客户知道。
linux =客户。indexOf(linux) > -1,
isWin =客户。索引(“windows”> -1,
“苹果”> -1,
isFirefox =客户索引= -1,
网络工具=客户,索引(“网络工具”)> -1,
(歌剧)> -1,
输入=文档。getElementById(“guest输入”);
如果(isFirefox) {
输入。setAttribute(“placeholder”、“ALT + SHIFT + Z”);
否则如果
输入。setAttribute (placeholder”、“ALT + Z”);
否则如果(isMac)
输入。setAttribute(“placeholder”、“CTRL + ALT + Z”);
否则
输入。setAttribute(“placeholder”、“SHIFT +逃亡- > Z”);
否则我就得操作…
<输入类型=“文本”id=“guest输入”“accesskey”placeholder=“Acces快捷方式:”></输入>
我已经通过添加类开发了自定义javascript来实现这个功能
例如:<button type="button" class="ctrl-p">自定义打印</button>
来看看提琴
//查找元素
Var banner = $("#banner-message")
Var按钮= $("button")
//添加类
按钮。(“点击”,函数(){
如果(banner.hasClass(“alt”))
banner.removeClass(“alt”)
其他的
banner.addClass(“alt”)
})
$(文档)时函数(){
美元(文档)。On ('keydown',函数(e) {
if (e.ctrlKey) {
$('[类* = " ctrl - "]:没有([data-ctrl])”)。每个(函数(idx, item) {
var关键= $(项目).prop(类).substr(美元(项).prop(类).indexOf (ctrl -) + 5, 1) .toUpperCase ();
美元(项)。attr(“data-ctrl”键);
美元(项)。追加('<div class="tooltip fade top in tooltip-ctrl alter-info" role="tooltip" style="margin-top: -61px;显示:块;可见性:可见;<div class=" font - family:宋体" style=" font - family:宋体;" > < / div > < div class = " tooltip-inner " > CTRL + +键+”< / div > < / div >”)
});
}
if (e.ctrlKey && e.which != 17) {
var Key = String.fromCharCode(e.which).toLowerCase();
如果($ (' .ctrl - ' +键)。长度== 1){
e.preventDefault ();
如果(! $ (' # divLoader ') .(":可见"))
$ (' .ctrl——“+键).click ();
console.log("You pressed ctrl + "+Key);
}
}
});
美元(文档)。On ('keyup',函数(e) {
如果(e。ctrlKey) {
$('[类* = " ctrl - "]”).removeAttr(“data-ctrl”);
$ (" .tooltip-ctrl ") .remove ();
}
})
});
# banner-message {
背景:# fff;
border - radius: 4 px;
填充:20 px;
字体大小:25 px;
text-align:中心;
过渡:全部0.2秒;
保证金:0自动;
宽度:300 px;
}
# banner-message。alt {
背景:# 0084 ff;
颜色:# fff;
margin-top: 40像素;
宽度:200 px;
}
# banner-message。Alt键{
背景:# fff;
颜色:# 000;
}
< script src = " https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js " > < /脚本>
< div id = " banner-message " >
< p > Hello World < / p >
<button class="ctrl-s" title="s">改变颜色</button><br/><br/>
<span>按CTRL+S触发按钮</span>的单击事件
< / div >
——或——
查看运行示例
https://stackoverflow.com/a/58010042/6631280
注意:在当前逻辑上,需要按Ctrl +
输入