Javascript onclick函数调用失败

javascript onclick failing on a function call

本文关键字:失败 函数调用 onclick Javascript      更新时间:2023-09-26

我有这个html…

<a onclick="search.analysisSelect('2');" href="javascript:void(0);">A Product</a>

…每当我在浏览器(IE, FF和Chrome)中点击该链接时,它都会失败。它告诉我们这个函数不存在。但是,如果我在firebug的控制台中输入确切的函数调用,它就可以正常运行。所以这个函数是存在的

确切的错误信息: "search。analysisSelect不是一个函数"

我最近将"搜索"对象名称更改为"searchTab",并且onclick工作正常。

为什么搜索对象的onclick失败?我很困惑……

这是搜索对象。它存储在一个单独的js文件中,当页面加载时加载。

var search = {
    analysisSelect: function(pub) {
        $("#tabs").tabs("select", "#analysis");
        analysisGrid.refreshSlickGrid(pub, '0', '1', '0');
    }
};

哦,我忘了提到,我还在搜索对象中定义了一个init()函数,它在另一个html元素的onclick事件上被调用,并且没有问题。Wtf…

您在哪里定义了search.analysisSelect() ?它应该在锚标记之前定义。

通常使用内联javascript不是一个好主意,考虑使用外部javascript文件并将该函数绑定到锚onclick事件,如下所示:

window.onload = function() { // ensures that the document is loaded before finding the anchor element
    // assign an Id to the anchor tag like this: <a id="idOfAnchorTag" href="#">A Product</a>
    var elem = getElementById('idOfAnchorTag');
    elem.onclick = function() {
        search.analysisSelect('2');
    }
}

内联事件处理程序中有一些奇怪的javascript巫术。search没有被解析为window.search,它击中了别的东西,我不知道它是什么。

见http://jsfiddle.net/yPhZ8/

但是,我可以告诉你如何解决它。用window.search代替。

<a onclick="window.search.analysisSelect('2');" href="javascript:void(0);">A Product</a>

见:http://jsfiddle.net/yPhZ8/1/

我今天正好遇到这个问题。结果是,不能使用ID与函数相同的HTML元素。

不要问我为什么,我只想说这与极其懒惰的解析有关。

我的例子:

<dd style="margin-left: 2px;"><input type="button" name="info[add_benefit]" id="add_benefit" value="{L_ADD_BENEFIT}" class="button2" 
                                    style="width: 100%;" onclick="add_benefit();" />&nbsp;</dd>

onclick方法将返回一个错误,指出该函数不存在。显然,它认为按钮本身是功能,但按钮是按钮,因此出现错误。