2012-07-26 169 views
1

任何人都可以请帮我解决这个冲突与我的JavaScript验证?如何解决与jQuery的冲突

表单不提交。但是,如果我删除onsubmit="return btnSubmitPD_OnClick()它正确地重定向窗体。但我当然需要这个功能。

这里是我的代码:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Testing</title> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$('#Submit').click(function() { 
    var emailVal = $('#email').val(); 
    $.post('checkemail.php', {'email' : emailVal}, function(data) { 
     if(data=='exist') { 
      alert('in'); return false; 
     }else{ 
      $('#form1').submit(); 
     } 

    }); 
});}); 
</script> 
<script type="text/javascript"> 
function appIsEmail(str){ 
    var at="@"; 
    var dot="."; 
    var lat=str.indexOf(at); 
    var lstr=str.length; 
    var ldot=str.indexOf(dot); 
    if (str.indexOf(at)==-1) return false; 

    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false; 
    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false; 
    if (str.indexOf(at,(lat+1))!=-1) return false; 
    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false; 
    if (str.indexOf(dot,(lat+2))==-1) return false; 
    if (str.indexOf(" ")!=-1) return false; 

    return true; 
} 

function btnSubmitPD_OnClick(){ 
    frmReg = document.getElementById("form1"); 

    if (!appIsEmail(frmReg.email.value)){ 
     alert("Please enter a valid email address!"); 
     frmReg.email.focus(); 
     return false;   
    } 

    return true; 
} 
</script> 
</head> 
<body> 
<form id="form1" name="form1" method="post" action="view.php" onsubmit="return btnSubmitPD_OnClick()"> 
    <p> 
    <input type="text" name="email" id="email" /> 
    </p> 
    <p> 
    <input type="button" name="Submit" id="Submit" value="Submit" /> 
    </p> 
</form> 
</body> 
</html> 
+0

@ArunJain之前为什么你认为'.noConflict'? – bPratik 2012-07-26 09:59:46

回答

0

几件事情:

这是更好地绑定一个提交事件的形式,而不是你的提交按钮点击事件,这是为了满足情况其中,用户按下电子邮件文本字段中输入:

$('#form1').submit(function() { // change from $('#Submit').click 

那么新submit处理程序中,你打电话叫的电子邮件验证方法:

var emailVal = $('#email').val(); 
if(btnSubmitPD_OnClick() === false) return false; 

然后,为了避免无限submit循环,你需要改变:

else{ 
      $('#form1').submit(); 
     } 

else{ 
      $('#form1')[0].submit(); // native submit on form element 
     } 

或者像mplungjan在他的评论中指出的那样,简单地改变你的

​​

要使用type="submit"

<input type="submit" name="Submit" id="Submit" value="Submit" /> 

并添加

if(btnSubmitPD_OnClick() === false) return false; 

您的来电$.post

+0

或将按钮更改为提交按钮并返回true/false – mplungjan 2012-07-26 09:51:31

+0

@mplungjan感谢您注意:) – 2012-07-26 09:57:21

+0

YW - 您甚至可以执行'return btnSubmitPD_OnClick();' – mplungjan 2012-07-26 10:05:27