我在表单中使用单选按钮来隐藏/显示联系人表单中的成员id字段。问题是,当javascript改变隐藏的id字段包含在html设置为"无"的值,该字段不再可用通过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;
}
由于某种原因,像这样重写HTML会使表单变得混乱。不知道为什么,但我在Chrome和IE中都看到了同样的事情。
如果你进入控制台并输入:
document.forms[0].vid
如果在更改单选按钮之前执行此操作,则会得到一个结果,如果在获得"undefined"之后执行此操作,则会得到一个结果。特别奇怪的是,如果你在控制台中输入这个:
document.getElementById("vid")
在两种情况下都得到一个结果。
一个可能的选择是隐藏和显示"vid"文本输入,而不是试图用隐藏的输入覆盖它。要做到这一点,你需要修改你的PHP来编写"ivaovid"行的文本输入版本,然后修改你的JavaScript为:
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";
}
}
}
}
另一个选项是隐藏和显示文本输入而不修改值,并根据$_POST['ivao']
的值忽略PHP post处理程序中的值。