【问题标题】:JQuery Form remains static - page doesn't validate on the flyJQuery 表单保持静态 - 页面不会即时验证
【发布时间】:2011-07-16 14:51:40
【问题描述】:

我在使用 jquery 的联系表单时遇到了一些问题。

我之前多次使用过相同的代码,但这次我更改了 div 和类 要有有意义的名字。

一切正常,只是当您按下提交时,您会被实际带到 send.php,而不是将数据放在占位符 div 中。

这让我发疯了,所以我想知道另外几双眼睛是否能发现什么?

谢谢,

马丁

所有JS包含在页面头部:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.anchor.js" type="text/javascript"></script>
<script src="js/jquery.fancybox-1.2.6.pack.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('.highlight').hover(function(){
        $(this).children().addClass('datahighlight');
    },function(){
        $(this).children().removeClass('datahighlight');
    });
  });
  </script>

<script type="text/javascript">
window.addEvent('domready', function(){
$('contactform').addEvent('submit', function(e) {
new Event(e).stop();
var log = $('form_results').empty().addClass('ajax-loading');
this.send({
update: log,
onComplete: function() {
log.removeClass('ajax-loading');
                       }
                    });
                });
            });
</script>      

联系方式:

        <h2 class="contact">Contact Us</h2>

        <p> Some text</p>

        <div id="log">
            <div id="form_results">
                <!-- SPANNER -->
            </div>
        </div>

        <form method="post" id="contactform" action="send.php"> 

            <p><label for="name">Name</label></p> 
            <input type="text" id=name name=name placeholder="First and last name" tabindex="1" /> 

            <p><label for="email">Email</label></p> 
            <input type="text" id=email name=email placeholder="example@domain.com" tabindex="2" /> 

            <p><label for="comment">Your Message</label></p> 
            <textarea name="comment" id=comment name=comment placeholder="Comments" tabindex="4"></textarea> 

            <input name="submit" type="submit" id="submit" tabindex="5" value="Send Message" /> 

        </form> 


    </section>

发送.php:

<?php

function alpha_numeric($str)
{
    return ( ! preg_match("/^([-a-z0-9])+$/i", $str)) ? FALSE : TRUE;
}

function valid_email($str)
{
    return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}

if ($_POST['name']=='' || strlen($_POST['name'])<3)
{
    $errors[] = 'Please include your name, it helps when contacting you! [needs to be more than 3 characters]';
}

if (valid_email($_POST['email'])==FALSE)
{
    $errors[] = 'At least put a real e-mail address!';
}

if ($_POST['comment']=='' || strlen($_POST['comment'])<3)
{
    $errors[] = 'Please write something, otherwise it\'s pointless contacting us!';
}

if(is_array($errors))
{
    echo '<div id="error-margin">';
    echo '<p class="error"><b>Can\'t send it for the following reasons:</b></p><br />';
    while (list($key,$value) = each($errors))
    {
        echo '<span class="error">'.$value.'</span><br /><br />';
    }
    echo'</div>';
}
else {
    // do something here----store to db, send email
    echo'<div id="success">';
    echo '<p><b>It worked!</b></p>';
    echo '<span>Thanks for contacting us! We\'ll be in touch soon</span>';
    echo'</div>';

    $name = stripslashes($_POST['name']); //sender's name
    $email = stripslashes($_POST['email']); //sender's email


    // The subject
    $subject  = "Message from 4playtheband.co.uk "; //The default subject. Will appear by default in all messages.

    $msg  = "From :   $name \r\n";  // add sender's name to the message
    $msg .= "e-mail : $email \r\n\n";  // add sender's email to the message
    $msg .= "---Message--- \r\n\n\t".stripslashes($_POST['comment'])."\r\n\n";  // the message itself

    // Extras:
    // Display user information such as Ip address and browsers information...
    $msg .= "---User information--- \r\n\n"; //Title
    $msg .= "User IP Address: ".$_SERVER["REMOTE_ADDR"]."\r\n"; //Sender's IP
    $msg .= "Browser: ".$_SERVER["HTTP_USER_AGENT"]."\r\n"; //User agent
    $msg .= "Page User Came From: ".$_SERVER["HTTP_REFERER"]; //Referrer

    // Send!
    (mail('someone', $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n"));

}

?>

【问题讨论】:

    标签: php jquery forms contact contact-form


    【解决方案1】:

    你使用的是jquery,所以不用window.addEvent('domready', function(){

    你的 js 代码应该是这样的:

    $('#contactform').submit(function() {
        var query = $(this).serialize();
        $('#form_results').fadeOut(500).addClass('ajax-loading');
        $.ajax({
            type: "POST",
            url: "send.php",
            data: query,
            success: function(data) {
                $('#form_results').removeClass('ajax-loading').html(data).fadeIn(500);
            }
        });
        return false;
    });
    

    【讨论】:

    • 感谢您抽出宝贵时间提出此建议,但页面的行为仍然相同。因为在js代码中声明了action和method,是不是就可以从&lt;form&gt;标签中取出action和method了?
    • 我已经用 DEMO & SOURCE 更新了我的代码工作和你的 PHP 代码工作,因此你可能在某处有一些 js 冲突。让我知道。
    • 完美,非常感谢。我能看到的唯一区别是您合并了两段 javascript,所以不知道为什么它会突然工作。你有什么技巧可以让 div 淡入淡出吗?
    • 我已经用fadeIn() 和fadeOut() 更新了demo 看看吧。
    • 非常棒,非常感谢您的帮助。我的最后一个问题是,一旦你提交了表格,你可以简单地继续点击按钮来不断地生成电子邮件:/你有什么建议吗?提交后隐藏或重置表单?
    【解决方案2】:

    window.addEvent('domready',... 来自 MooTool。由于您使用 Jquery,您可能需要添加

    <script language="javascript" type="text/javascript">
      jQuery.noConflict();
    </script>
    

    之前。哦,FancyUpload 似乎只适用于 MooTool,别忘了包含它。

    【讨论】:

    • $('.form_results')$('.contactform') 尝试过,但也没有用。
    • 查看编辑,我认为您有一些库相互混淆
    • 感谢您注意到这一点,因为在我使用 MooTools 的其他页面上,我复制了现有的表单代码,忘记了我使用的是 jQuery...谢谢。
    【解决方案3】:

    我通常像这样使用 preventDefault()

    <script type="text/javascript">
      window.addEvent('domready', function(){
        $('contactform').addEvent('submit', function(e) {
          e.preventDefault();
          var log = $('form_results').empty().addClass('ajax-loading');
          this.send({
            update: log,
            onComplete: function() {
              log.removeClass('ajax-loading');
            }
          });
        });
      });
    </script> 
    

    【讨论】:

    • 谢谢,刚刚意识到我使用的代码来自我的 mooTools 表单,当时我在新网站上使用 jQuery,很抱歉造成混乱,但感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2011-02-19
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多