1

我是 jQuery 新手,并尝试四处寻找有关如何执行此操作的答案。我有 2 个功能,我希望两者一起工作。一个函数是 submitHandler ,它用于隐藏表单,同时将一个类添加到隐藏元素以取消隐藏 - 即感谢您提交 h1。另一个功能是抓取输入数据并在提交时显示在表单中。所以问题是我可以让那个工作,但另一个没有。即在表单提交上我可以看到数据输入,但看不到 h1 谢谢消息。

以下是功能:

提交处理程序:

    submitHandler: function() {


    $("#content").empty();
    $("#content").append(
    "<p>If you want to be kept in the loop...</p>" +
    "<p>Or you can contact...</p>"
    );
    $('h1.success_').removeClass('success_').addClass('success_form');
    $('#contactform').hide();

},

onsubmit="返回输入数据()"

    function inputdata(){

                    var usr = document.getElementById('contactname').value;
                    var eml = document.getElementById('email').value;
                    var msg = document.getElementById('message').value;

                    document.getElementById('out').innerHTML = usr + " " + eml + msg;
                    document.getElementById('out').style.display = "block";

                    return true;
            },

该表单使用 PHP 和 jQuery - 我不了解 AJAX,但经过一些阅读后更加不确定。请帮助我,我不知道自己在做什么,目前我正在学习,但对我来说仍然是一条漫长的道路。

谢谢

表格:

          <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform" onsubmit="return inputdata()">
        <div class="_required"><p class="label_left">Name*</p><input type="text" size="50" name="contactname" id="contactname" value="" class="required" /></div><br/><br/>
        <div class="_required"><p class="label_left">E-mail address*</p><input type="text" size="50" name="email" id="email" value="" class="required email" /></div><br/><br/>
        <p class="label_left">Message</p><textarea rows="5" cols="50" name="message" id="message" class="required"></textarea><br/>
        <input type="submit" value="submit" name="submit" id="submit" />
    </form>

PHP位:

<?php

$subject = "网站联系表查询";

//如果表单提交 if(isset($_POST['submit'])) {

//Check to make sure that the name field is not empty
if(trim($_POST['contactname']) == '') {
    $hasError = true;
} else {
    $name = trim($_POST['contactname']);
}

//Check to make sure sure that a valid email address is submitted
if(trim($_POST['email']) == '')  {
    $hasError = true;
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
    $hasError = true;
} else {
    $email = trim($_POST['email']);
}

//Check to make sure comments were entered
if(trim($_POST['message']) == '') {
    $hasError = true;
} else {
    if(function_exists('stripslashes')) {
        $comments = stripslashes(trim($_POST['message']));
    } else {
        $comments = trim($_POST['message']);
    }
}

//If there is no error, send the email
if(!isset($hasError)) {
    $emailTo = 'info@bgv.co.za'; //Put your own email address here
    $body = "Name: $name \n\nEmail: $email \n\nComments:\n $comments";
    $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    mail($emailTo, $subject, $body, $headers);
    $emailSent = true;

}

} ?>

Jquery 验证位:

$(document).ready(function(){
$('#contactform').validate({

       showErrors: function(errorMap, errorList) {
       //restore the normal look
       $('#contactform div.xrequired').removeClass('xrequired').addClass('_required');
       //stop if everything is ok
       if (errorList.length == 0) return;
       //Iterate over the errors
       for(var i = 0;i < errorList.length; i++)
       $(errorList[i].element).parent().removeClass('_required').addClass('xrequired');
        },

这是完整的 jQuery 位:

$(document).ready(function(){

$('#contactform').validate({

       showErrors: function(errorMap, errorList) {
       //restore the normal look
       $('#contactform div.xrequired').removeClass('xrequired').addClass('_required');
       //stop if everything is ok
       if (errorList.length == 0) return;
       //Iterate over the errors
       for(var i = 0;i < errorList.length; i++)
       $(errorList[i].element).parent().removeClass('_required').addClass('xrequired');
        },

submitHandler: function() {             

    $('h1.success_').removeClass('success_').addClass('success_form');
    $("#content").empty();
    $("#content").append('#sadhu');
    $('#contactform').hide();

},

}); });

最新编辑 - 看起来像这样:

$(document).ready(function(){

$('#contactform').validate({

       showErrors: function(errorMap, errorList) {
       //restore the normal look
       $('#contactform div.xrequired').removeClass('xrequired').addClass('_required');
       //stop if everything is ok
       if (errorList.length == 0) return;
       //Iterate over the errors
       for(var i = 0;i < errorList.length; i++)
       $(errorList[i].element).parent().removeClass('_required').addClass('xrequired');
        },

    function submitHandler() {             
        $('h1.success_').removeClass('success_').addClass('success_form');
        $("#content").empty();
        $("#content").append('#sadhu');
        $('#contactform').hide();
    },
    function inputdata() {
         var usr = document.getElementById('contactname').value;
         var eml = document.getElementById('email').value;
         var msg = document.getElementById('message').value;
         document.getElementById('out').innerHTML = usr + " " + eml + msg;
         document.getElementById('out').style.display = "block";
    },
    $(document).ready(function(){
        $('#contactForm').submit(function() {
            inputdata();
            submitHandler();
        });
    });

});

4

3 回答 3

1

我知道这个问题已经得到解答,这与问题本身没有直接关系;关于问题中的代码更是如此。但是,我不能发表评论,因为我是一个全新的成员,但我只是想我会在你的代码中突出显示一些东西!主要是关于使用 jQuery 的一致性。

在为 'submitHandler' 提供的函数中 - 你清空 $('#content') 然后将 HTML 附加到它。这会起作用,但更简单的方法是使用 .html() 函数;请注意,此函数用于返回元素中包含的 HTML;但那是没有提供任何参数的时候。当您提供参数时,它会重写 html 元素的内容。此外,我很可能会在 h1 成功元素上使用 .show() 方法;如果只是为了代码可读性。

例如:

submitHandler: function(){
    $('#content').html( "<p>If you want to be kept in the loop...</p>"
        + "<p>Or you can contact...</p>");
    $('h1.success_').show();
    $('contactform').hide();
}

至于 inputdata() - 你似乎又偏离了 jQuery 的精神,我个人使用 jQuery 时的目标是保持一致性 - 但也因为 jQuery 语法使传统的 javascript 'document.getElemen ...'对象看起来有点过时/需要额外输入。最基本的jQuery 本质上最好被视为文档对象的包装器 - 只是添加了语法糖。此外,它允许您链接方法 - 因此最后两个表达式在使用 jQuery 时基本上可以“修饰”为一个。

我个人会使用 .val()、.html() 和 .css() 函数;例子:

function inputdata(){
    var usr = $('#contactname').val();
    var eml = $('#email').val();
    var msg = $('#message').val();

    $('#out').html( usr + " " + eml + msg )
    .css('display', 'block');

    return true;
}
于 2012-06-22T21:15:00.567 回答
0

未调用您的 submitHandler 函数。这就是为什么它不起作用。

将此添加到您的代码中:

$('#contactForm').submit(function() {
inputdata();
submitHandler();

});

编辑:

试试这个:

$(document).ready(function(){

$('#contactform').validate({

showErrors: function(errorMap, errorList) {
   //restore the normal look
   $('#contactform div.xrequired').removeClass('xrequired').addClass('_required');
   //stop if everything is ok
   if (errorList.length == 0) return;
   //Iterate over the errors
   for(var i = 0;i < errorList.length; i++)
   $(errorList[i].element).parent().removeClass('_required').addClass('xrequired');
},

submitHandler: function(form) {             
    $('h1.success_').removeClass('success_').addClass('success_form');
    $("#content").empty();
    $("#content").append('#sadhu');
    $('#contactform').hide();
    var usr = document.getElementById('contactname').value;
    var eml = document.getElementById('email').value;
    var msg = document.getElementById('message').value;
    document.getElementById('out').innerHTML = usr + " " + eml + msg;
    document.getElementById('out').style.display = "block";
    form.submit();
}
});
});
于 2011-07-24T12:32:49.190 回答
0

改变 return true,在 inputdata 函数中返回 false

于 2011-07-24T14:44:48.240 回答