2011-12-01 41 views
0

我有这个网站...的JavaScript的onclick没有一个函数调用

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

......每当我点击浏览器(IE,FF和Chrome)链接,它会失败。它告诉我该函数不存在。但是,如果我将这个确切的函数调用到萤火虫的控制台中,它运行良好。所以这个函数确实存在。

确切的错误信息:“search.analysisSelect是不是一个函数”

我最近更改了“搜索”的对象名称为“searchTab”和的onclick工作正常。

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

这里是搜索对象。这存储在页面加载时加载的单独的js文件中。

var search = { 
    analysisSelect: function(pub) { 
     $("#tabs").tabs("select", "#analysis"); 

     analysisGrid.refreshSlickGrid(pub, '0', '1', '0'); 
    } 
}; 

哦,我忘了提,我也有在搜索目标,这就是所谓对另一个HTML元素的onclick事件定义一个init()功能可按,那没有问题,触发了。 Wtf ...

+0

那么你是说你的程序在启用Firebug的情况下工作,但在禁用时会失败? – jsalonen

+0

我们可以试试codez plz吗?总是有http://jsfiddle.net/ – anddoutoi

+0

@jsalonen号。无论firebug启用还是禁用,onclick都会失败。我可以通过萤火虫控制台调用函数,证明函数确实存在。 –

回答

1

你是哪里定义的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'); 
    } 
} 
+0

我毫不怀疑这个函数是在定位标记写入之前定义的。 –

+0

我不能说你的标记中的内联函数调用有什么问题,但是如果它在萤火虫控制台中工作,那么你会尝试使用我在我的答案中发布的代码片段,无论是在外部js文件中还是在脚本标签中。 – fardjad

1

有一些奇怪的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/

+0

这实质上是我在OP中提出的解决方案。 –

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方法会返回一个错误,指出该功能并不存在。显然它认为按钮本身是功能,但按钮是一个按钮,因此是错误。