10

私はjQueryにあまり詳しくありません。ページをリロードせずにバックグラウンドで送信されるフォームを作成しようとしています。

クリックすると表示および非表示になる非表示の div があり、div 内にフォームがあります。

2 つの問題があります。

1) フォームの検証が失敗しても、フォームは引き続き送信されます。検証コードと提出コードを条件に入れようとしましたif(validation == valid) { $.ajax.... }が、正しく機能しません。

2) フォームが送信されると、div は自動的に非表示になるため、成功したメッセージは表示されません。

コードは次のとおりです。

$().ready(function() { 

    // Validate the form when it is submitted, using validation plugin.
    var validator = $("#contactform").validate({
        errorContainer: container,
        errorLabelContainer: $(),
    onkeyup: false,
    onclick: false,
    onfocusout: false,
    errorPlacement: function (error, element) { 
error.insertBefore(element);    
}   
    });
});

$(function() {

    //This submits a form
$('input[type=submit]').click(function() {
        $.ajax({
            type: "POST",
            url: "contact.php",
            data: $("#contactform").serialize(),
            beforeSend: function() {
                $('#result').html('<img src="loading.gif" />');
            },
            success: function(data) {
                $('#result').html(data);
            }

        })
    })
})


//This shows and hides div onclick
$(document).ready(function(){   
        $(".slidingDiv").hide(); 
        $(".show_hide").show(); 
    $('.show_hide').click(function(){ 
    $(".slidingDiv").slideToggle(); 
    });
}); 
4

3 に答える 3

26

クリック イベント ( input[type=submit]) にバインドするのではなくsubmit、フォームのイベントにバインドする必要があります。

$("form").on("submit", function (e) {
    e.preventDefault();

検証についてもよくわかりません。非同期で実行する場合は、コールバックが必要です。同期的に実行される場合、いつトリガーされますか? 検証プラグインが独自にそれを行わない限り、フォームが送信されたときに行う必要があるようです:

$("form").on("submit", function (e) {
    e.preventDefault();
    if ($(this).validate(options)) {
        $.ajax

を使用e.preventDefaultするとリロードが防止され、成功の div が表示されるようになります。

于 2013-10-07T19:48:22.087 に答える