Javascript ';未定义';不是计算Safari中el.click()的函数

Javascript ';未定义';不是计算Safari中el.click()的函数,javascript,Javascript,我想在按下Enter按钮时运行js函数。 IE、Chrome和Opera中的一切都很好,但我在Safari中遇到了一个错误(解释如下) 我需要一个纯Javascript解决方案,而不是jQuery 这是功能: function pressSearch(e) { if (typeof e == 'undefined' && window.event) { e = window.event; } var charCode = (e.which)

我想在按下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();
    }
}
<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()')
这是HTML

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();
    }
}
<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错误。

getElementById('enterSearch')


应该是
文档。getElementById('enterSearch')
您正在触发
div
上的单击事件,该div将没有隐式的单击处理程序。

a
div
元素没有根据默认值定义的单击事件处理程序。因此,首先需要为enterSearch div应用一个单击事件,例如
Search
。否则按钮本身将无法单击

要以编程方式执行事件,请使用以下构造:

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一起使用。

我在工作时遇到了同样的问题。我想到的是在safari(当然还有其他浏览器)中触发点击事件的以下方法:

根据@Dennis的说法,你的代码已经可以在Firefox上运行了,但是从79.0版开始,这段代码应该可以在Firefox上运行

请注意,这已被弃用。但是,通过Internet Explorer中的事件构造函数创建事件的新方法。

如果您查看,则只为
HTMLInputElement
定义了
click()
函数,因此,尽管Safari的用户友好性不高,但它不需要实现该功能

现代浏览器触发事件的正确方法是:


这是在Chrome、Safari、Firefox和IE9中工作的JSFIDLE:

我的真实代码中有
文档。blabla
,它不起作用。我将代码复制并粘贴到Firefox中,但没有错误。。。你能提供一个吗?我只是因为“我不想要jQuery”行而投票。这对通过“addEventListener”添加的事件处理程序不起作用。但是addEventListener甚至不适用于IE。因此,如果可能的话,我建议使用“老式”方式。或者,必须插入IE Others开关以编程方式绑定事件。好的,当使用编程方式绑定事件时,Daedalus的解决方案似乎是最通用的。使用它。我已经尝试过这个CreateEvent,但它不适用于IE8,正如你提到的。但是,如果我必须为IE8或任何其他选项运行此事件,还有什么其他选项呢。因为我被困在这种情况下。谢谢你能给我答案你是说如果(t.click())还是如果(t.click)?@PaulBrannan已修复,并在其他方面进行了更新。