我正在实现一些动态创建新 iframe 和删除它的相关按钮的 javascript 函数。
这是我为创建按钮而编写的代码:
function addButton(iframeId, num) {
var butt = document.createElement('button');
var butt_text = document.createTextNode(num);
butt.appendChild(butt_text);
butt.id = num + 100;
butt.onclick = function() { removeButton(butt.id); removeIframe(iframeId, butt.id); }
document.body.appendChild(butt);
numButt++;
}
这就是我所说的:
addElement(iframe.id, cont);
参数“cont”是一个从1开始的计数器,并在函数中增加以创建新的iframe,因此第一个按钮将命名为101并消除iframe#1,第二个按钮将命名为102并消除帧#2,依此类推。
“numButt”是一个从0开始的计数器,计算创建了多少个按钮,所以要知道最后创建的按钮的id。
删除按钮的功能是这样的,它工作正常:
function removeButton(buttonId) {
butt = document.getElementById(buttonId);
if (butt) {
butt.parentNode.removeChild(butt);
}
}
现在我想重新分配按钮的 onclick 事件。因为如果我删除 iframe #3,所有 id 高于 3 的 iframes.id 都将使用此函数重命名(我需要重命名,因为我的 resizeIframe 函数适用于相应的 ID):
function renameIds(elim) {
for (i = 1; i <= cont; i++) {
if (i > elim) {
document.getElementById(i).id = i-1;
}
}
}
我需要更改按钮的 onclick 事件,以便名为 104 的按钮将消除 iframe #3,按钮 105 将消除帧 #4,依此类推。
我在 removeIframe 函数中执行此操作,但它不起作用,因为 Firefox 错误控制台返回“document.getElementById(a) is null”:
function removeIframe(iframeId, buttId) {
iframe = document.getElementById(iframeId);
var a;
if (iframe) {
iframe.parentNode.removeChild(iframe);
renameIds(iframeId);
cont--;
resizeIframe();
for (a = 101; a <= 100+numButt; a++) {
if (a > buttId) {
document.getElementById(a).onclick = function() { removeButton(a); removeIframe(a-101, a); }
}
}
}
}
有什么问题??提前致谢!