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)时,放置在新 div(testdiv)中的任何字段在使用 $_get 时总是返回为空。

编辑2:

将 readnode 放置在 writenode 位置的函数,

<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 回答