我有一个聊天窗口,其中有一个关闭按钮(输入类型='图像')和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,然后删除它,但如果有什么我不知道请告诉
答案 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>