0

Javascriptを使用してフォームを検証しようとすると、アラートが正常に表示されますが、falseが返された場合でも何も起こらなかったため、フォームは送信されます。アラートは、送信ボタンを初めて押したときにのみ機能します。誰かが私が間違っていることを教えてもらえますか?

Javascript:

 function checkForm() {

       var name, email, text;

        name =  document.contact.userName.value;
        email = document.contact.email.value;
        text =  document.contact.textarea.value;

        //document.write(name + " " + email + " " + text);

        if (name == "" || email =="" || text=="")    {

             alert("Please fill all fields before submitting!");
             return false;

        }else if (!looksLikeMail(email))     {

         alert("Please enter you real email!");
             return false;
        }else       {

             alert("Your feedback was sent, Thank you!");
             return true;
            }    
 }

function looksLikeMail(str)     {

              var lastAtPos = str.lastIndexOf('@');
              var lastDotPos = str.lastIndexOf('.');
              return ((lastAtPos < lastDotPos) && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
>        }

HTML:

<form name="contact" action="login" method="POST" onsubmit="checkForm()">
                <input type="hidden" name="page" value="feedback">
                <div data-role="fieldcontain">
                    <fieldset data-role="controlgroup" data-mini="true">
                        <label for="textinput1">
                            Name:
                        </label>
                        <input id="name" placeholder="Enter your full name" value="" type="text" name="userName"/>
                    </fieldset>
                </div>
                <div data-role="fieldcontain">
                    <fieldset data-role="controlgroup" data-mini="true">
                        <label for="textinput2">
                            Email
                        </label>
                        <input id="email" placeholder="Enter your email" value="" type="email" name="email" />
                    </fieldset>
                </div>
                <div data-role="fieldcontain">
                    <fieldset data-role="controlgroup">
                        <label for="textarea1">
                            Feedback
                        </label>
                        <textarea id="textarea" placeholder="Enter your text here" name="textarea"></textarea>
                    </fieldset>
                </div>
                <input type="submit" data-inline="true" data-theme="b" data-icon="check" data-iconpos="right" value="Submit" />
            </form>
4

1 に答える 1

3

変化する

<form name="contact" action="login" method="POST" onsubmit="checkForm()">

<form name="contact" action="login" method="POST" onsubmit="return checkForm()">

関数がfalseを返す場合、onsubmitは送信をキャンセルしますが、falseを返す場合onsubmitに限ります。したがって、からの戻り値を渡す必要がありますcheckForm()

于 2012-08-01T07:33:40.487 に答える