根据输入类型和验证显示不同的错误

时间:2013-01-29 19:37:17

标签: javascript jquery spring-mvc

这是最近一直在弯曲我的大脑的东西。

我正在Spring MVC中构建一个Web应用程序,一些表单包括多种输入类型(例如:radiobuttons [spring radio buttons],选择框,文本字段等...)。 我的目标是在jQuery中使用.hide()和.show()方法隐藏/显示标题下面的ID“msgDiv”的div(“选择颜色”),这两个表单上的相同。 我想要实现的是对两个表单使用相同的验证功能,并相应地显示/隐藏自定义消息。

注意 这只是为了确保在更改我的应用程序之前进行正确的错误处理和验证而进行的练习,因此忽略了此示例中颜色选择和音乐的愚蠢。

代码!

表格1:“选择表格”(仅选择框验证)
HMTL代码段:

<form:form action="FormA" commandName="user" name="myForm" id="myFormSelect">
    <input type="hidden"  id="color" name="color" value="${requestScope.user.color}" />
        <h2>Select a Color</h2>
        <div id="msgDiv">
            <form:errors path="*"  element="span"  id="errorMsg" /> 
            <span id="message"/></span><br/><br/>
        </div>
        <p>Please select a color</p>

            <select id="userSelect" name"user" class="selectbox_class" style="max-width: 200px;">
                <option value="">--Select One--</option>
                    <%
            Map<String, String> myMap = ( Map<String, String>) session.getAttribute("myMap");
            for (String key:myMap.keySet())
            {
            %>  <option value="<%= key %>"><%out.print(key+"</option>");
            }
            %>
            </select>
    <br/>
    <br/>
    <div class="button-panel"><span class="buttons buttons-left"></span>
        <button type="button" class="buttons buttons-middle"  onClick="selectVal();" id="send" value="send">Submit</button>
        <span class="buttons buttons-right"></span>
    </div>
</form:form>

Form2:“Select&amp; Radio Form”(选择框和无线电验证)
HMTL代码段:

<form:form action="FormB" commandName="user" name="mySecondForm" id="mySecondFormSelectAndRadio">
    <input type="hidden"  id="color" name="color" value="${requestScope.user.color}" />
        <h2>Select a Color</h2>
        <div id="msgDiv">
            <form:errors path="*"  element="span"  id="errorMsg" /> 
            <span id="message"/></span><br/><br/>
        </div>
        <p>Please select a color</p>

            <select id="userSelect" name"user" class="selectbox_class" style="max-width: 200px;">
                <option value="">--Select One--</option>
                    <%
            Map<String, String> myMap = ( Map<String, String>) session.getAttribute("myMap");
            for (String key:myMap.keySet())
            {
            %>  <option value="<%= key %>"><%out.print(key+"</option>");
            }
            %>
            </select>
    <br/>
<h2>Music Genre</h2>
<p>Please select the button which describes your taste in music</p>

<form:radiobutton path="music" name="radio" id="radio1" value="classicForm"/><label for="radio1">Classical Music</label><br> 
<form:radiobutton path="music" name="radio"  id="radio2" value="jazzForm"/><label for="radio2">Jazz Music</label><br>
<br>
<div class="button-panel"><span class="buttons buttons-left"></span>
   <button type="button" class="buttons buttons-middle" onClick="history.back(-1)">Back</button>
   <span class="buttons buttons-right"></span>
</div>
<div id="spacer"></div><div id="spacer"></div>
<div class="button-panel">
    <div id="spacer"></div>
    <span class="buttons buttons-left"></span>
    <button type="button" class="buttons buttons-middle"  onClick="selectVal();" id="send" value="send">Submit</button><span class="buttons buttons-right"></span>
</div>

到目前为止,这是每页底部的脚本部分        

  $(document).ready(function(){

<% if (myMap != null) {%>
    $('select[name=userSelect]').change(function() {
        var selVal = $(this).val();
        var txtVal = $("#userSelect option:selected").text();
        $("#color").val(txtVal);    
     }); 

     $('select[name=userSelect]').val($("#color").val());

<%} else { %>
    $("#color").val("${user.color}");
<%} %>
    });

    $(document).ready(function(selectVal) {  
     if ($("#userSelect").val()=="")      
        $("#msgDiv").show();
    return dataValid;
    });

到目前为止,这是我的外部javascipt文件:

function submitForm(formId)
{
document.getElementById(formId).submit();
}

function selectVal() {
var dataValid = true;
var selector = document.getElementById("userSelect");
var radios = $("input[name=radio]");
var message= document.getElementById("message");
var errorMsg = "";

message.innerHTML = "";
if (selector.value == "" || radios.checked == false) {
    $('#msgDiv').hide();
    dataValid = false; 

    if (selector.value == "") {
        errorMsg += "Please Select an Color from the Drop Down Menu";
    }

    if (radios.checked == false) {
        errorMsg += "Please select a Genre of Music";
    }

    message.innerHTML = errorMsg; 
    }

    return dataValid;
   }

要求:

  1. Div应保持隐藏状态,除非在页面加载时验证不完整
  2. 应出现相应的错误消息
  3. 如果用户在未选择颜色或音乐类型的情况下单击提交,则应显示组合消息。
  4. 此处还有一个类似的帖子供参考。 else if statement for validation

    谢谢!

1 个答案:

答案 0 :(得分:0)

好的,经过几个小时后我才能拿出这个答案

  • @DWB一起取出hide()/ show()并使用.toggle()切换页面上的显示
  • 我没有尝试从内部和外部脚本调用代码,而是采用了K.I.S.S方法。对于像我这样的初学者或中级程序员来说,始终是一件好事。 保持简单愚蠢

因此,不是 6 函数(每个html页面上的2个函数,每个调用2个函数的单独文件中的2个方法),最终产品是:

  • 一个VALIDATION函数和一个window.onload函数调用,以保持div隐藏onload并重新加载在外部文件中(“yourname.js”)

如果您有任何疑问,请发送电子邮件或发送电子邮件给我,并且一如既往,欢迎采用不同的方法!

<强> SOLUTION:

function customMessageForMultipleInputs()
{
var choicesForm = document.getElementById("choicesForm");

if(radio1.checked=="" && radio2.checked=="" && document.getElementById("userSelect").value=="")
{           selected=false;
        document.getElementById("msgDiv").style.display = "block";
        document.getElementById("errorMsg").innerHTML="Please select your Favorite Color and
   a Genre of Music";
        return false;

 }
 if(document.getElementById("userSelect").value=="")
 {
        document.getElementById("msgDiv").style.display = "block";
        document.getElementById("errorMsg").innerHTML="Please select a Color";
        return false;
 }if(document.getElementById("radio1").checked=="" && document.getElementById("radio2").checked=="") 
 {  
selected=false;
document.getElementById("msgDiv").style.display = "block";
    document.getElementById("errorMsg").innerHTML="Please select a Genre of Music;
     return false;
 }else{   
        document.getElementById("msgDiv").style.display = "none";
        reportOutageConfirm.submit();
        return true;
        document.getElementById("msgDiv").style.display = "none";
 }
 };
window.onload = function() {
customMessageForMultipleInputs();
 };

以下是它的工作原理:

  1. 我创建了一个函数'customMessageForMultipleInputs(),它在我的HTML文件中在click事件的按钮内调用。 (例如myBTN prop = val,prop = val,onClick =“customMessageForMultipleInputs etc.”)

  2. 在我最初的问题中,我正在混淆我的编程逻辑。更简单地说我的单选按钮的.checked属性(egif(document.getElementById(“radio1”)。checked ==“”)类似于“ value ”的“ userSelect“dropbox。

  3. window.onload = function(){ 的 customMessageForMultipleInputs ();  };

  4. 听起来很傻,但是#3让我有一个循环,因为我试图变得“光滑”并且做的比做必要的更多。对于任何新的window.onload基本上确保比显示页面时(不总是根据我的经验呈现),此函数将触发并且我的错误div('#msgDiv')的默认设置 除非用户没有正确填写表单,否则将隐藏并保持对页面的隐藏。

    无论如何,我希望有一天可以帮助别人,谢谢!!!!

    我喜欢这个网站! :)