我想按Enter键运行js功能。 在IE,Chrome和Opera中,一切都很好用,但我在Safari中收到了错误(如下所述)。
我需要纯Javascript 解决方案,不是jQuery 。
这是功能:
function pressSearch(e) {
if (typeof e == 'undefined' && window.event) {
e = window.event;
}
var charCode = (e.which) ? e.which :
((e.charCode) ? e.charCode :
((e.keyCode) ? e.keyCode : 0));
if (charCode == 13) {
document.getElementById('enterSearch').click();
}
}
这是 HTML :
<input type="text" id="searchKey" onkeypress="pressSearch(event)">
<div id="enterSearch">Search</div> // This is the "button"
我收到错误:
// Safari
TypeError: 'undefined' is not a function
(evaluating 'getElementById('enterSearch').click()')
我做错了什么?
编辑:我修复了Mozilla Firefox错误。
答案 0 :(得分:18)
如果您查看HTML DOM Level 2 Specification,click()
函数仅定义为HTMLInputElement
,因此虽然用户不太友好,但Safari并不需要实现它。
触发现代浏览器事件的正确方法是DOM Level 3 Events:
// First create an event
var click_ev = document.createEvent("MouseEvents");
// initialize the event
click_ev.initEvent("click", true /* bubble */, true /* cancelable */);
// trigger the event
document.getElementById("someElement").dispatchEvent(click_ev);
这是适用于Chrome,Safari,Firefox和IE9的jsfiddle:http://jsfiddle.net/y5yW9/6/
答案 1 :(得分:3)
Safari将(我把它拿回来; .click()
视为未定义,因为Safari不存在.click()
。.click()
正在为我工作。我不喜欢我不知道:/)我在a similar problem工作时遇到了同样的问题。经过一些研究之后,我想出了以下内容,以便在safari(以及其他浏览器)中触发点击事件:
var t = document.getElementById('someidhere');
if (document.dispatchEvent) {
var o = document.createEvent('MouseEvents');
o.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, t);
t.dispatchEvent(o)
} else if (document.fireEvent) {
t.fireEvent('onclick');
} else if (t.click()) {
t.click()
}
我不知道这是否适用于你的firefox方面,鉴于根据@Dennis,你的代码已经适用于firefox。如果没有真正考验这个环境,我会在黑暗中拍摄。我希望它适合你。
答案 2 :(得分:2)
您正在触发div
上没有隐式点击处理程序的点击事件。
答案 3 :(得分:1)
div
元素默认情况下没有定义任何点击事件处理程序。因此,首先需要为enterSearch div应用click事件,例如<div id="enterSearch" onclick="submitSearch()">Search</div>
。否则按钮本身将无法点击。
要以编程方式执行事件,请使用以下构造:
function pressSearch(e) {
if (typeof e == 'undefined' && window.event) {
e = window.event;
}
var charCode = (e.which) ? e.which : ((e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : 0));
if (charCode == 13) {
var a = document.getElementById('enterSearch');
if (typeof a.onclick == "function") {
a.onclick.apply(a); // binds the scope of onclick to a
}
}
}
我无法对IE进行验证,但它适用于Safari。
答案 4 :(得分:0)
getElementById('enterSearch')
应为document.getElementById('enterSearch')