0

新しい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 が削除され、2 番目のボタンの名前は 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); }
            }
        }
    }
}

どうしたの??前もって感謝します!

4

1 に答える 1

0

減らせばいい

numButt

1つを削除する場合、つまりnumButt--; 関数 removeButton で。

于 2012-05-28T09:45:58.797 に答える