0

「 this.nextSiblingElement.id is null 」というエラーが表示されますが、要素が生成されるときに要素の ID を明確に設定している場合です。私はまだいくつかの作業を使用できることを認めます。nextSiblingElement の ID が null として返される原因は何なのか、ちょっと興味がありました。前の要素がドロップダウン メニューの前に生成され、メニューがpreviousChild.appendChildでその前に配置されていることを確認しました。

必要に応じてコードを編集できますが、意味をなすためにどの程度表示すればよいかわかりませんでした。次のように関連する機能のみを示しています。

//helper function to add elements to the form
function createNewFormElement(inputForm, feildName, elementName, elementValue, elementType){

var inputString = String(feildName + ": <input name='" + elementName + "' type='" + elementType + "' /> ");
var newElement = document.createElement('div');

newElement.style.display = 'inline';

if (feildName == "Quantity" && containerType != "Box/Bag"){
    newElement.style.visibility = 'hidden';
}else{
    newElement.style.visibility = 'visible';
}
if (feildName == "Quantity"){
    newElement.id = "boxhide"+counter;
}else{
    newElement.id = 'dynamicInput';
}

newElement.innerHTML = inputString;

newElement.value = elementValue;
document.getElementById(inputForm.id).parentNode.appendChild(newElement);

return newElement;

}

//helper function to add dropdown
function createNewDropDown(inputForm, feildName, elementName){

    var dropDown, arValue;
    var newElement = document.createElement('div');

    newElement.id = 'dynamicInput';
    newElement.style.display = 'inline';

    dropDown = "<option value='" + containerType + "' selected>" + containerType + "</option>";


    for (i=0; i<conArray.length; i++){
        arValue = conArray[i];
        dropDown = dropDown + "<option value='" + arValue + "'>" + arValue + "</option>";
    }

    var inputString = String(feildName + ": <select onchange='switchMain(this.nextElementSibling.id);' name='" + elementName + "' id='" + elementName + "'>" + dropDown + "</select> ");

    newElement.innerHTML = inputString;
    document.getElementById(inputForm.id).parentNode.lastChild.previousSibling.appendChild(newElement);

    return newElement;
}
function getStyle(divName){

var temp = document.getElementById(divName).style.visibility;

return temp;
}

function switchMain(divName){

var e = document.getElementById("myContainers[]");
var strUser = e.options[e.selectedIndex].value;

if (strUser == "Box/Bag"){

    var current = getStyle(divName);

    //console.debug(current);

    document.getElementById(divName).style.visibility = "visible";
}else{
    document.getElementById(divName).style.visibility = "hidden";
}
}
4

1 に答える 1

1

あなたはいいねを持っていinputStringます

"… <select onchange='switchMain(this.nextElementSibling.id);' …&gt;…&lt;/select> "

さて、実行すると

newElement.innerHTML = inputString;

select 要素に兄弟要素があることは期待できません。これは、 内の唯一の (要素) ノードnewElementです。

<div …&gt; … <select onchange='switchMain(this.nextElementSibling.id);' …&gt;…&lt;/select> </div>

したがって、そのプロパティを取得しようとすると例外が発生しthis.nextElementSiblingます。nullid

ドロップダウン メニューの前に前の要素が生成され、previousChild.appendChild を使用してその前にメニューが配置されていることを確認しました。

いいえ、appendChildDOM 内の新しい親の位置に関係なく、常に最後に新しいノードを挿入します。要素を特別な場所に挿入する場合は、 を使用しますinsertBefore

于 2013-02-13T19:36:42.130 に答える