Javascript添加的表单元素不能通过$ _POST获得

时间:2015-09-22 21:17:42

标签: javascript php html forms

我在表单中使用单选按钮隐藏/显示联系表单中的成员ID字段。问题是,当javascript更改html中包含的隐藏id字段时,该字段设置为" None",该字段不再通过post提供,即使javascript在没有收音机时将其更改回原始字段框已选中。请帮助,我是javascript的新手,谢谢。

相关表格代码:

echo '<tr><td>IVAO Member:</td><td><input type="radio" name="ivao" value="yes" onchange="ivaoVID()">Yes | <input type="radio" name="ivao" value="no" onchange="ivaoVID()" checked>No</td></tr>';
echo '<tr id="ivaovid"><input type="hidden" name="vid" id="vid" value="None"></tr>';

使用Javascript:

function ivaoVID() {
    var selected = document.getElementsByName("ivao");
    var row = document.getElementById("ivaovid");
    for(i = 0; i <selected.length; i++) {
        if (selected[i].checked == true) {
            if (selected[i].value == "yes") {
                row.innerHTML = "<td>IVAO VID:</td><td><input type='text' name='vid' id='vid'></td>";
            } else {
                row.innerHTML ="<input type='hidden' name='vid' id='vid' value='None'>";
            }
        }
    }
}

动作php文件:

public function submit(){
    $model = new contactModel;
    $name = isset($_POST['name']) ? $_POST['name']:$this->registry->getData('fname').' '.$this->registry->getData('lname');
    $vid = isset($_POST['vid']) ? $_POST['vid']:$this->registry->getData('vid');
    $email = isset($_POST['email']) ? $_POST['email']:$this->registry->getData('email');
    $message = $_POST['message'];

    echo $name . '<br> ' . $vid . '<br>' . $email . '<br>' . $message;
}

1 个答案:

答案 0 :(得分:1)

覆盖HTML,因为某些原因弄乱了表单。不知道为什么会这样,但我在Chrome和IE中都看到了相同的东西。

如果你进入控制台并输入:

O(n)

如果在更改单选按钮之前执行此操作,则会得到一个结果,当您在“未定义”之后执行此操作时。关于它的特别奇怪的是,如果你在控制台中输入它:

document.forms[0].vid

在这两种情况下都会得到结果。

一种可能的替代方法是隐藏和显示“vid”文本输入,而不是尝试使用隐藏输入覆盖它。为此,您可以更改PHP以编写“ivaovid”行的文本输入版本,然后将JavaScript更改为:

document.getElementById("vid")

另一种选择是隐藏和显示文本输入而不修改值,并忽略PHP帖子处理程序中的值,具体取决于function ivaoVID() { var selected = document.getElementsByName("ivao"); var row = document.getElementById("ivaovid"); var vid = document.getElementById("vid"); for(i = 0; i <selected.length; i++) { if (selected[i].checked == true) { if (selected[i].value == "yes") { row.style.display = ""; vid.value = ""; } else { row.style.display = "none"; vid.value = "None"; } } } } 的值。