1

几乎是所有这一切的新手,所以试图让我的代码尽可能简单。我有一个表单,提交后会向我发送一封电子邮件,尽管我希望用户在提交之前必须填写所有字段,因此我有以下脚本

<script type='text/javascript'>
    $('#mailform').submit(function()    {
        if (('#emailName' || '#emailEmail' || '#emailSubject').val() == "") {
            alert('Please fill out all fields before clicking submit');
            return false;
        }
        else    {
            alert('Your Email has been sent');
        }
    });
    </script>

这是我的 HTML

<form id="mailform" method="" action="http://www.mysiteaddress.co.uk/sendmail.php">
                    Your Name: <input id="emailName" name="yourName" type="text" /><br />
                    Your Email:  <input id="emailEmail" name="yourEmail" type="text" /><br />
                    Subject:     <input id="emailSubject" name="subject" type="text" /><br />
                    Message:<br />
                    <textarea name="message" rows="15" cols="40"></textarea><br />
                    <input type="submit" />
                </form>

但是,当我单击提交时,表单会完全忽略 javascript 并运行 php.ini。为什么我的 javascript 没有先运行?

验证现在正在工作,但是现在当它运行我的 php 时,它不会将表单邮寄给我,而是直接跳转到我的 else 语句的标题部分

if ( preg_match( "/[\r\n]/", $name ) || preg_match( "/[\r\n]/", $email ) ) {

header ( "Location: http://www.mysite.co.uk/contactme" );

}
else    {
        mail( "me@mysite.co.uk", "$name <$subject>",
            $message, "From: $name <$email>" );
        header ( "Location: http://www.mysite.co.uk/contactme" );
}

?>

4

3 回答 3

2

if语句中的选择器有问题。

TypeError: 'undefined' is not a function
(evaluating '('#emailName' || '#emailEmail' || '#emailSubject').val()')

尝试这个:

if ($('#emailName').val()==""
  || $('#emailEmail').val()==""
  || $('#emailSubject').val() == ""

http://jsfiddle.net/rPDnQ/

于 2013-07-26T00:42:00.043 回答
0

如果您通过 JavaScript 验证输入,请注意一旦禁用 JavaScript,您的验证将被完全绕过。
为防止此类事情发生(以及解决您的问题),您可以执行以下操作:

第 1 步:不要使用<input type="submit" />;相反,使用<input type="button" />。这样做是为了防止您的表单在没有 JavaScript 的情况下被提交。因此,用户被迫打开 JavaScript;因此,验证现在可以工作了。但是,请务必通知用户需要 JavaScript。你可以简单地使用noscript标签。事件。这是一个放入其中的示例:

第2步:现在,解决您的问题;给你的按钮一个 id 并定义一个onclick


<script type='text/javascript'>
$(document).ready(function()    {   
    $('#button_id').click(function()    {
        if ($('#emailName').val()=="" || $('#emailEmail').val()==""
            || $('#emailSubject').val() == ""){
            alert('Please fill out all fields before clicking submit');
        }
        else    {
            alert('Your Email will be submitted now');
            $("#mailform").submit();      
        }
    });
});
</script>

这应该可以解决您的问题。

希望解释清楚,这会有所帮助。

于 2013-07-26T01:30:14.030 回答
0

尝试删除表单操作并使用 jquery.post方法发送表单操作将执行的数据,并验证您的输入而不是您所做的,因此您可能会说:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type = "text/javascript">
$(document).ready(function() { 
      //get your inputs
      var name = $('#emailName').val();
      var email = $('#emailEmail').val();
      var subject = $('#emailSubject').val();


      //validate it so
      if(name == '' || email == '' || subject == '') { 
          //do something
      } else { 
         //do your `ajax` call or `.post` request here like
          $.post('urlToExecuteSendMail', { name: name, email: email, subject: subject }, function(data) { 
              alert(data);
         });
      }
  });
</script>
于 2013-07-26T01:12:10.457 回答