0

onsubmit が検証 JavaScript 関数を実行してそれを確認する登録フォームがあります。

a : すべてのボックスに値が入っています。

b : パスワード値が一致します。

c : メールアドレスは有効です。

電子メール検証スクリプトは ajax 呼び出しを行い、電子メール アドレスが以前に登録されているかどうかを確認します。

Safari を除くすべてのブラウザで問題なく動作します。Safari では、ページがハングするだけです。

コードの関連部分は次のとおりです。

htmlフォーム

    <form name="login" action="<?php echo htmlspecialchars($pre_link.'register3.php'); ?>" method="post" onsubmit="return validateReg();">
      <div id="register_label">Email Address:<span id="req">*</span></div>
      <input class="register_input" id="myregusername" name="myusername" size="14"/><br><br> 
      <div id="register_label">Password:<span id="req">*</span></div>
      <input class="register_input" id="mypassword" name="mypassword" size="14" type="password"/><br><br>
      <div id="register_label">Confirm Password:<span id="req">*</span></div>
      <input class="register_input" id="mypassword1" name="mypassword1" size="14" type="password"/><br><br>                              
      <br /><br />           
      <input type="submit" id="loginBtn" name="submit" value="Next" />     
   </form>

js 検証コード

  function validateReg(){
    var origBorder = "1px solid #CCCCCC";
    var errorBorder = "1px solid red";  

    var myregusername = document.getElementById("myregusername");       
    var mypassword = document.getElementById("mypassword");             
    var mypassword1 = document.getElementById("mypassword1");       

    var errorstr = "";
    var error = false;  

    myregusername.style.border = origBorder;        
    mypassword.style.border = origBorder;       
    mypassword1.style.border = origBorder;          

    if(myregusername.value.length == 0) {
       errorstr = errorstr + "\n" + "Please enter your email address";
       error = true;
       myregusername.style.border = errorBorder;
    }

    if(mypassword.value.length<=5) {
       errorstr = errorstr + "\n" + "Please enter your password that is at least 6 characters long";
       error = true;
       mypassword.style.border = errorBorder;           
    }

    if(mypassword1.value!=mypassword.value) {
        errorstr = errorstr + "\n" + "Your passwords do not match";
        error = true;
        mypassword.style.border = errorBorder;
        mypassword1.style.border = errorBorder;         
    }

    if(error) {
       alert(errorstr);
   return false;            
    } else {
      if (checkMail()){                     
         return true;
      } else {              
        return false;
      } 
   }
}

ajax コード

    function checkMail(){   
       var myusername = document.getElementById("myregusername") ;      
       var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
       if (filter.test(myusername.value)) { 
           function checkMail3(){   
    var myusername = document.getElementById("myregusername").value ;       
    var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(myusername)){
               $.ajax({
                  url: "checkregemail.php",
                  type: "post",
                  headers: { "cache-control": "no-cache" },
                  data:{ username : myusername },
                  success: function(data) {
                      if(data=='1'){
                        alert("sorry this email address has already been registered\nClick login to sign in with his email address");
                        document.getElementById("myregusername").focus();
                        return false;
                       }else{   
                        alert("good email address");    
                        return true;
                      }
                    },              
                    error:function(){
                    alert("failure");            
                    }
                });
    } else {
        var errorBorder = "1px solid red";      
        var error = false;
        alert('Please enter a VALID email address');        
        myusername.style.border = errorBorder;
        return false;
    }
}
        } else {
         var errorBorder = "1px solid red";     
         var error = false;
         alert('Please enter a VALID email address');       
         myusername.style.border = errorBorder;
         return false;
       }
}

ajax 呼び出しを削除すると、Safari で正常に動作します。

$post をキャッシュする Safari について読んだことがありますが、見つけたものを自分のコードに組み込んで機能させるのに十分な知識がありません。「headers: { "cache-control": "no-cache" }」を追加しましたが、それでも問題は解決しません。

電子メールが登録されている場合はエラーメッセージがスローされますが、データベースに電子メールが見つからない場合は「emailk good」アラートがスローされますが、元のステートメントに true が返されないため、フォームは送信されません

どんな助けでも大歓迎です。

4

0 に答える 0