1

私はjQueryが初めてで、これを行う方法についての答えを探してみました。私には 2 つの機能があり、両方を連携させたいと考えています。1 つの関数は submitHandler であり、フォームを非表示にすると同時に非表示要素にクラスを追加して非表示にするために使用されます。つまり、h1 を送信していただきありがとうございます。もう 1 つの機能は、入力データを取得してフォームに送信することです。したがって、問題は、それを機能させることはできますが、もう一方は機能しないことです。つまり、フォーム送信では、データ入力は表示されますが、h1 ありがとうメッセージは表示されません。

関数は次のとおりです。

SubmitHandler:

    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="return inputdata()"

    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 を使用しています。私を助けてください。私は自分が何をしているのかわかりません。現時点では学んでいますが、まだ長い道のりです。

ありがとうございました

フォーム:

          <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 Validate ビット:

$(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 は、本質的にドキュメント オブジェクトのラッパーと見なすのが最適です。さらに、メソッドをチェーンできるため、最後の 2 つの式は、jQuery を使用するときに本質的に「ドレスアップ」して 1 つに見えるようにすることができます。

個人的には .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

CHange true を返し、inputdata 関数で false を返す

于 2011-07-24T14:44:48.240 に答える
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 に答える