如何将HTML元素作为参数传递给Javascript函数?

时间:2009-10-05 06:31:21

标签: javascript firefox

我有一个聊天窗口,其中有一个关闭按钮(输入类型='图像')和onclick我想从父节点中删除聊天窗口,我使用此代码

closeBtn.setAttribute("onclick", "return closeContainer(cc" + friendId + ");");

请注意,此按钮是通过javascipt创建的,cc223423432(比如说)将是聊天窗口的ID

这是我删除它的代码

function closeContainer(ccId) {
    var x = ccId;
    x.parentNode.removeChild(x);
    //..........
}

现在在IE8和Chrome中它发现传递的参数为HTMLDIV并且工作正常但在Firefox中它会出错 cc223423432未定义 任何想法为什么???

我知道我总是可以做一个document.getElementByID,然后删除它,但如果有什么我不知道请告诉

5 个答案:

答案 0 :(得分:3)

由于参数未包含在引号中,因此Firefox 将此视为带有名称的变量 cc223423432未定义。这就是它产生错误的原因。

最好将其作为字符串传递,然后使用

document.getElementById ( parameter );

获取对象。

答案 1 :(得分:3)

  

closeBtn.setAttribute(“onclick”,“return closeContainer(cc”+ friendId +“);”);

不要使用setAttribute来设置事件处理程序......实际上根本不在HTML文档上使用setAttribute。 IE6-7中存在影响许多属性的错误,包括事件处理程序。始终使用'DOM Level 2 HTML'直接属性属性;它们非常可靠,使您的代码更易于阅读。

失去了从字符串创建函数的尝试(这几乎总是错误的),只需写:

closeBtn.onclick= function() {
    return closeContainer(document.getElementById('cc'+friendId));
};

甚至只是将closeContainer功能内联:

closeBtn.onclick= function() {
    var el= document.getElementById('cc'+friendId);
    el.parentNode.removeChild(el);
    return false;
};
  

在firefox中它给出了一个错误cc223423432未定义任何想法为什么???

因为IE使每个元素都带有id(或在某些情况下name)一个全局变量(属性为window)。因此,在IE中,只需说出cc223423432并获取对象的引用即可逃脱。

但是,这是一件非常糟糕的事情。除了在其他浏览器中不存在之外,它会使用垃圾填满全局命名空间,并且只要您实际拥有与您页面上的id同名的变量,就会出错。

使用getElementById来获取对id'd节点的引用,如上所述。这无处不在,而且毫不含糊。

答案 2 :(得分:2)

您需要将该ID作为字符串传递:

closeBtn.setAttribute("onclick", "return closeContainer('cc" + friendId + "');");

然后:

function closeContainer(ccId) {
    var x = document.getElementById(ccId);
    x.parentNode.removeChild(x);
    //..........
}

答案 3 :(得分:1)

jquery适用于所有这些浏览器。我会做以下事情:

closeBtn.click(function(){
    ('#cc' + friendId ).remove();
});

但是,如果你不想学习jquery api的上升时间,看起来你需要将你的id参数作为字符串传递,否则firefox认为这是一个变量名(注意里面的附加单引号closeContainer调用:

closeBtn.setAttribute("onclick", "return closeContainer('cc" + friendId + "');");

答案 4 :(得分:1)

或者您可以执行以下操作

function handler(elementRef) {
  console.log(elementRef);
}
<button onclick="handler(this)">Click Me!</button>