0

フォーム内に div があり、その上にある選択ボックスの値に基づいてフィールドが入力されています。このフィールドは、送信時に常に「null」として返されます。フォームの他の部分の周りに div を配置して、実際に div 自体であるかどうかをテストし、その周りに div を持つ各フィールドが「null」として返され続けました。

<form>
<span id="writenode"></span>
<input type="button" value="Add language" onClick="addlanguage()" >
<input type="submit" value="Submit" >
</form>

<!--This div below is called every time I want to add a new 'instance' of this form
this div works fine, its when i add a div inside that one I get 'null'-->

<div id="readnode" style="display: none">
    <select name="rank">
        <option disabled="disabled" selected="selected">Rating</option>
        <option value="3">3</option>
        <option value="2">2</option>
        <option value="1">1</option>
        <option value="0">0</option>
    </select>   
    <select name="time">
        <option disabled="disabled" selected="selected">Time</option>
        <option value="3">3</option>
        <option value="2">2</option>
        <option value="1">1</option>
        <option value="0">0</option>
    </select>
    <input type="button" value="X"
        onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
</div>

したがって、上記のコードは正常に機能し、内部に div を追加すると、以下のように「null」になります。

<form>
<span id="writenode"></span>
<input type="button" value="Add language" onClick="addlanguage()" >
<input type="submit" value="Submit" >
</form>

<!--This div below is called every time I want to add a new 'instance' of this form
this div works fine, its when i add a div inside that one I get 'null'-->

<div id="readnode" style="display: none">
    <select name="rank">
        <option disabled="disabled" selected="selected">Rating</option>
        <option value="3">3</option>
        <option value="2">2</option>
        <option value="1">1</option>
        <option value="0">0</option>
    </select>   
<div id='testdiv'>
    <select name="time">
        <option disabled="disabled" selected="selected">Time</option>
        <option value="3">3</option>
        <option value="2">2</option>
        <option value="1">1</option>
        <option value="0">0</option>
    </select>
</div>
    <input type="button" value="X"
        onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
</div>

これを回避する最善の方法は何ですか? どうすればそれを行うことができますか?

編集: Div 'readnode' が呼び出され、必要に応じてフォーム内に配置され、上記のフォーム内にある div 'writenode' を置き換えます。この div は完全に正常に機能します。「readnode」内に別の div (testdiv) を追加すると、$_get を使用すると、新しい div (testdiv) 内に配置されたフィールドは常に null として返されます。

EDIT2:

writenode の代わりに readnode を配置する関数、

<script type="text/javascript">
/*  Set the counter that will increase every time
    the user adds a new language*/
var counter = 0;
function addlanguage()
{
    // Ask the user for input
    var language = prompt("Language Name","");
    if (language == "" || language == null)
    {
        alert("Please enter a language.");
    }
    else
    {
        counter++;
        // Find the element to be copied
        var newNode = document.getElementById('readnode').cloneNode(true);
        newNode.id = '';
        newNode.style.display = 'block';
        var newField = newNode.childNodes;
        // Give all fields a unique value
        for (var i=0;i<newField.length;i++)
        {
            var theName = newField[i].name;
            var theId = newField[i].id;
            if (theName)
            {
                newField[i].name = theName + counter;
            }
            if (theId == "languagename")
            {
                // Change the field to the user input
                newField[i].innerHTML = language;
            }
            if (theName == "lang")
            {
                // Replace the hidden field with the correct language
                newField[i].value = language;
            }
        }
        // Insert the elements
        var insertHere = document.getElementById('writenode');
        insertHere.parentNode.insertBefore(newNode,insertHere);
    }
}
</script>

これはphpです。

<?php
if ($_GET["time1"] == null)
{ ?>
    <form>
    <span id="writenode"></span>
    <input type="button" value="Add language" onClick="addlanguage()" >
    <input type="submit" value="Submit" >
    </form>
<?php
}
else
{
    $final = 0;
    $i = 1;
    while($final == 0)
    {
        $gettime = "time" . $i;
        $getRank = "rank" . $i;
        $time = $_GET[$gettime];
        $rank = $_GET[$getRank];

        if ($language == "")
        {
            $final = 1;
        }

        if ($final == 0)
        {
            // Show the user the input
            echo("<p>Your <strong>$time</strong> is <strong>$rank</strong>.</p>");
        }
        $i++;
    }
} ?>
4

1 に答える 1

0

div 内に配置すると、newNode.childNodes の一部ではなくなるため、名前を適切に設定することはできません。単純化するには、子の子をチェックするか、jQuery を使用する必要があります。

for (var i=0;i<newField.length;i++)
        {
    var subField = newField.childNodes;


    for (var i=0;i<subField.length;i++) {
            var theName = subField[i].name;
            var theId = subField[i].id;

        // ...
    }
}
于 2013-10-10T16:02:08.023 に答える