让我先说这不是我想要的函数编码方式(内联和劫持),但我必须解决第三方应用程序配置界面,并以更改源代码作为最终选择。
所以我有一个调用 onclick
函数的图像:
<img src="images/button_closed.gif" id="img100023" border="0"
onclick="OnNodeImageClick(event, this)" href="theurl.cfm">
该函数接受 vars 事件并获取 URL:
function OnNodeImageClick(evt, clickedImage) {
var href = clickedImage.getAttribute("href");
...
我需要在共享原始 ID 号的单独元素上执行完全相同的逻辑:
<span id="node100023" >External Links</span>
我尝试过的是这样的html:
<span id="node100023"
onclick="javascript:OverwriteToTreeHandler($(this).attr('id'))">
External Links</span>
这就是我的功能:
function OverwriteToTreeHandler(nodeID){
var clickedItem = 'img'+nodeID.replace(/[^0-9]/g, '');
//tried $('body').find( clickedItem ) didnt work
OnNodeImageClick(event, clickedItem );
}
但我收到以下错误:
Uncaught TypeError: Object img100023 has no method 'getAttribute'
但是,通过在 HTML 中静态分配标识符。
我尝试过的是这个html,我得到了我想要的结果:
<span id="node100023"
onclick="javascript:OnNodeImageClick(event, img100023)">
External Links</span>
我认为这与参数有关,事实上,当我尝试动态获取元素时,它没有将其注册为对象,但我没有连接这是如何完成的。
最佳答案
OnNodeImageClick
需要一个 DOM 元素 - 您正在传递一个字符串。试试这个:
function OverwriteToTreeHandler(nodeID) {
var clickedItem = document.getElementById('img'+nodeID.replace(/[^0-9]/g, ''));
OnNodeImageClick(event, clickedItem);
}
此外,当您调用 OverwriteToTreeHandler< 时,
.this.id
比 $(this).attr('id')
更好(性能和清晰度方面)/
关于JavaScript 通过另一个函数将对象传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845591/