javascript onclick函数调用失败

时间:2011-12-01 15:05:58

标签: javascript html

我有这个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 ...

3 个答案:

答案 0 :(得分:1)

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

一般使用内联javascripts不是一个好主意,考虑使用外部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');
    }
}

答案 1 :(得分:1)

在内联事件处理程序中有一些奇怪的javascript voodoo。 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/

答案 2 :(得分:0)

我今天刚遇到这个问题。事实证明,您不能拥有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方法会返回一个错误,指出该函数不存在。显然它认为按钮本身就是功能,但按钮是一个按钮,因此错误。