2014-02-26 58 views
1

我是新来的,我不是编码专家,我仍然在学习,所以请耐心等待。 :)简单的邮件发送附件,尽管验证发送

我创建了一个简单的表单,应该发送带有CV附件的电子邮件。我找到了这个工作的代码,它按预期工作(正确地发送带有文件的邮件)。我没有使用phpmailer或类似的,它只是简单的PHP邮件功能。 我想要一个客户端验证,javascript/jquery经典,并可能稍后服务器端。关键是我无法阻止提交表单来处理JavaScript验证。我想这是因为有一个文件(我使用相同的形式,没有附件,在其他地方,它工作得很好)。我张贴的代码,所以你可以看到什么是错的:

<form method="post" action="mail.php" id="uploadform" enctype="multipart/form-data"> 
    <p>Name :</p> 
    <input name="name" id="name" type="text" /> 
    <p>E-mail :</p> 
    <input name="email" id="email" type="text" /> 
    <p>Tel :</p> 
    <input name="tel" id="tel" type="text" /> 
    <p>Message :</p> 
    <textarea name="mex" id="mex" rows="7" cols="10"></textarea> 
    <p>File Upload :</p> 
    <input name="file" id="file" type="file"> 
    <input type="submit" name="submit" id="submit" value="send" /> 
</form> 

,这是脚本:

<script type="text/javascript"> 
$(document).ready(function() { 

    $('#uploadform').submit(function(){ 
     validateForm(); 
     return false; 
    }); 

    function validateForm(){ 
      var name=document.forms["uploadform"]["name"].value; 
     if(name==null || name=="") { 
      $('#name').attr("placeholder","Who is writing?"); 
      return false; 
     } 

     var email=document.forms["uploadform"]["email"].value; 
     var atpos=email.indexOf("@"); 
     var dotpos=email.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) { 
      $('#email').val(""); 
      $('#email').attr("placeholder", "Insert a valid e-mail address!"); 
      return false; 
     } 
    } 

}); 
</script> 

我仍然无法找到为什么脚本不阻止提交的数据。它似乎忽略了JavaScript。我尝试了不同的方法,如onsubmit inline on form tag,event.preventDefault();和类似的,但行为是相同的。我为这个小问题疯了。如果有人能帮忙/解释,我会很高兴。谢谢!

+0

如果我没有错,不应该像'return validateForm();'这样也考虑到验证返回。并且你有没有试过通过控制台(Item Inspector或其他)调试你的JS –

+0

我试着用萤火虫控制台,但不报告警告或错误 – warlove

回答

1

您已将支票包裹在提交函数的回调中。

你应该这样做,如:

$(document).ready(function() { 

    $('#submit').click(function (event){ 
     return validateForm(); 
    }); 

    function validateForm(){ 
     var name=document.forms["uploadform"]["name"].value; 
     if(name==null || name=="") { 
      $('#name').attr("placeholder","Who is writing?"); 
      return false; 
     } 

     var email=document.forms["uploadform"]["email"].value; 
     var atpos=email.indexOf("@"); 
     var dotpos=email.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) { 
      $('#email').val(""); 
      $('#email').attr("placeholder", "Insert a valid e-mail address!"); 
      return false; 
     } 
     return true; 
    } 

}); 

让我知道是否可行。

+0

对不起,但不起作用。我可以编译这些字段或不...它无论如何发送数据,我收到一封邮件。我想我现在尝试了所有这些类型的变体,而且我仍然坚持这一点。 :( – warlove

+0

看到这个: http://jsfiddle.net/h5HZH/1/ 这是工作的jsfiddle让我知道,如果不为你工作 –

+0

你也应该看看本作的电子邮件验证。 : http://stackoverflow.com/questions/46155/validate-email-address-in-javascript?rq=1 你的方法不是最防弹的 –