早上好。我有一个问题,我试图解决,但我被困,部分是由于我没有完全理解JSP / Java平台,并没有完全理解以正确的方式实现我的代码的方式/方式。我确实有ASP背景,所以我对一些概念有点熟悉。
我遇到的问题是:我正在尝试填充动态标签和文本框以显示在网页(JSP)上。我已成功地用一段JavaScript代码填充文本框,但是,当我提交表单时(在Postback上),我的动态控件已经消失,但我的所有静态控件仍然存在。我需要找到一种方法来将我的信息保存在提交的动态控件中。当我有错误时,表单不会提交,但是当表单完成渲染时,所有信息和动态文本都会丢失。
我的解决方案:我已决定使用隐藏字段来保存此信息,但我无法在表单提交后关闭隐藏字段:请看下面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">
function validateForm(){
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="" && document.getElementById('two').value==1){
alert("EMPTY");
document.getElementById('text').style.display = "block";
return false;
}else{
document.myform.submit();
}
}
function display(el) {
if (el.value == "two") {
document.getElementById('text').style.display = "block";
}else {
document.getElementById('text').style.display = "none";
document.getElementById('dynbox').value = '';
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
<label >First Name</label> <input type="text"/>
<div>
<input type="radio" name="radio1" id="one" value="one" onchange="display(this);"/>Eligible
</div>
<div>
<input type="radio" name="radio2" id="two" value="two" onchange="display(this);"/>Not Eligible
</div>
<div id="text" class="glassy" name="mytext" style="display:none;">Other: <input type="text" id="dynbox"/>
</div>
<div>
<input type="hidden" name="mytext" value="${mytext}" />
<br></br>
<input type="submit" onclick="validateForm()" value="Submit"/>
</div>
</form>
</body>
</html>
我要做的是选择&#34;不符合条件&#34;选项并在文本框中输入一些文字&#39; mytext&#39;然后按提交。一旦我按下提交,如果没有填写名字文本框,那么我想触发我隐藏的文本框,这样我就不会在动态创建的文本框中丢失我的信息。
我希望这是有道理的。我不确定如何在JSP中做。有人可以就如何获得我的预期结果提供指导吗?在回发后保持动态控制?
提前致谢。
答案 0 :(得分:1)
首先要做的一件事:不要让名字Java
和Java-Script
混淆你。他们(几乎)没有任何共同之处。你在这里使用的只是Java-Script(没有Java,没有任何JSP)。
无论如何,我认为validateForm()
函数中的条件不起作用。
我对它进行了一些测试,它适用于这些变化:
您的表单
<form name="myForm" action="test.html" method="get" onsubmit="return validateForm();">
<label >First Name</label> <input type="text" id="firstName"/>
<div>
<input type="radio" name="radio1" id="one" value="one" onchange="display(this);"/>Eligible
</div>
<div>
<input type="radio" name="radio2" id="two" value="two" onchange="display(this);"/>Not Eligible
</div>
<div id="text" class="glassy" name="mytext" style="display:none;">Other: <input type="text" id="dynbox"/>
</div>
<div>
<input type="hidden" name="mytext" value="${mytext}" />
<br></br>
<input type="submit" value="Submit"/>
</div>
</form>
我只是更改了第一个输入并给它一个ID(因为我无法在任何地方找到id'fname'),所以我们可以使用JavaScript访问它。
接下来是你的提交按钮。你有一个额外的onclick="validateForm()";
- 它确实调用了validateForm函数,但是没有监听返回的值(它执行函数..仅此而已)。所以onsubmit="return validateForm()"
就足够了。
您的验证功能
function validateForm() {
var x = document.getElementById('firstName').value;
if ((x == null || x == "")) {
alert("EMPTY");
// document.getElementById('text').style.display = "block";
return false;
} else {
return true;
}
}
x
现在可以通过元素的id检索(我觉得更容易)..无论如何,if条件是其中一个问题。在表单中,您将单选按钮“2”的值设置为two
。但是在if条件下,你问是否1
......(在我的理解中)应该永远不会发生。我刚删除它,告诉你你的功能是这样的。如果要检查第二个单选按钮的状态,可以像这样测试:
if(document.getElementById('two').checked == true)
甚至更好
if(document.getElementById('two').checked)
最后一件事:在你的else语句中,你只需返回true
而不是调用submit
..因为在这里:
onsubmit="return validateForm();"
您要求validateForm()
函数为您提供true
然后提交或false
,然后停止提交。
哦,最后一件事(它是最后一件事,承诺):Java和Java-Script按顺序处理所有&&
和||
:首先测试'x == null'然后测试x=="" && document.getElementById('two').value==1
将一起评估(&amp;&amp;和绑定比||更强)..仅供参考:)