如何在回发后保持动态添加的控件? Javascript,JSP

时间:2014-04-11 17:17:54

标签: java javascript jsp hidden

早上好。我有一个问题,我试图解决,但我被困,部分是由于我没有完全理解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中做。有人可以就如何获得我的预期结果提供指导吗?在回发后保持动态控制?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先要做的一件事:不要让名字JavaJava-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;和绑定比||更强)..仅供参考:)