0

私は奇妙な問題を抱えています.私が間違っていることを見つけるのを手伝ってくれることを願っています.

「 popup」とボタン「send_mail 」という div があります。

send_mail」ボタンを押すと、「popup」が表示され、ajax メールフォームと「close」ボタンが表示されます。

メールフォームに入力して送信すると、メッセージは私のメールアドレスに送信されます。

もちろん、この部分ではすべてが完璧に機能します。ここまでは順調ですね...

問題は、「ポップアップ」フォームを開き、「閉じる」ボタンを使用して閉じてから、フォームを再度開いてメールを送信することです。メールボックスに同じメールが 2 回届きます。

明らかに、ポップアップフォームを10回開いて閉じ、10回目にメールを送信すると、メールボックスに10通のメールが届きます...

これを修正してメールを 1 つだけ送信する唯一の方法は、ページ全体を更新することです。

それは何ですか?

これがjsコードです(混沌としたフォームで申し訳ありません):

一番最初の行は、メインの HTML ページに複数のボタンがあるため、どのボタンが押されたかを判断することです (ユーザーの数に応じて、各ユーザーには 1 つの「send_mail_X」ボタンがあります)。

$("#list_container").on('click', "[id^='send_mail']", function () {
    var val = $(this).attr("value");
    $.ajax({
        type: "POST",
        url: "include/list_class.php",
        data: val,
        success: function(data){

            $("#Popup").on('click', "#close", function () {
                disablePopup();
            });


            $("#Popup").on('submit', "#admin_mail", function () {

                var sendbutton = $(this).find('#sendmail');
                var action = "include/admin_contact.php";
                sendbutton.attr('disabled','disabled');

                $.post(action, {
                    email: $("#Popup").find('#email').val(),
                    title: $("#Popup").find('#title').val(),
                    message: $("#Popup").find('#message').val()
                },
                    function(data){
                        document.getElementById('admin-form_output').innerHTML = data;  
                        centerPopup();
                    }
                );


                return false;



            });


            var array = data.split('#');
            var mymail = array[0];
            var myaddress = array[1];
            var isdisabled = "";
            if(mymail == ""){
                mymail = "Nie można wyslać maila.<br>Brak ardesu email.";
                isdisabled = "disabled='disabled'";
            }
            if(myaddress == ""){
                myaddress = "Uzytkownik nie podał swojego adresu.<br>Zaznacz jego zamowienie na czerwono.";
            }


            $("#bgPopup").data("state",0); 
            loadPopup(); 

            $("#Popup").on('click', "#popupClose", function () {  
                disablePopup();  
                return false;
            }); 



            $("#Popup").html("<a href='#' id='popupClose'><img src='images/close.png'></img></a> <div class='large-notice'><div id='admin-form_output'></div><br /><h4>ADRES WYSYLKOWY:</h4>" + myaddress + "<br /><br /><br /><h4>KONTAKT MAIL:</h4><div id='admin-form'><div class='field' style='display: block;'><form name='admin_mail' id='admin_mail' method='post' action='include/admin_contact.php' ><input type='hidden' name='email' id='email' value='" + mymail + "'/> <input type='text' name='title' id='title' onFocus='if(this.value == \"Tytul wiadomosci\") { this.value = \"\"; }' onBlur='if(this.value == \"\") { this.value = \"Tytul wiadomosci\"; }' value='Tytul wiadomosci' /> <textarea name='message' cols='190' rows='6' id='message' onFocus='if(this.value == \"Wiadomosc\") { this.value = \"\"; }' onBlur='if(this.value == \"\") { this.value = \"Wiadomosc\"; }' value='Wiadomosc'>Wiadomosc</textarea><div class='button'> <br /><input type='submit' class='btn-image' id='sendmail' " + isdisabled + " value='Wyslij' /></div><div class='button'> <br /><input type='button' class='btn-image' id='close' value='Zamknij' /></div></form></div></div><br /><br /><br />" + mymail + "</div>");

            centerPopup();

        }   

    });                                                                 


    return false;
});


function loadPopup(){  
    //loads popup only if it is disabled  

    if($("#bgPopup").data("state")==0){  
        $("#bgPopup").css({  
            "opacity": "0.7"  
        });  
        $("#bgPopup").fadeIn("medium");  
        $("#Popup").fadeIn("medium");
        $("#bgPopup").data("state",1);  
    }  
}  

function disablePopup(){
    $("#Popup").empty();
    if ($("#bgPopup").data("state")==1){  
        $("#bgPopup").fadeOut("medium");  
        $("#Popup").fadeOut("medium");  
        $("#bgPopup").data("state",0);  
    }  
}  

function centerPopup(){ 


    var winw = $(window).width();  
    var winh = $(window).height();  
    var popw = $('#Popup').width();  
    var poph = $('#Popup').height();  
    $("#Popup").css({  
        "position" : "fixed",  
        "top" : winh/2-poph/2,  
        "left" : winw/2-popw/2  
    });  
    //IE6  
    $("#bgPopup").css({  
        "height": winh    
    });  
}
4

1 に答える 1

0

この関数を閉じるボタンのonclickイベントに入れます

function empty_div(){
    $("#yourmaindiv").html('');
}

それが行うことは、フォームとその要素を含む div を空にすることです。

別の可能な解決策は、フォームの名前に乱数を使用することです。したがって、新しいフォームが読み込まれるたびに、一意の id と name プロパティが設定され、すべてのフォームではなく、そのフォームのみが送信されます。フォームが読み込まれるたびに同じ名前が付けられ、それが問題を引き起こしていると思います

<-form name='myForm2322343233' id='myform2322343233' method='post'    action='somwhere.php'->

そのため、一意の識別子を持つたびに

于 2013-03-03T06:52:43.547 に答える