簡體   English   中英

提交表單后,彈出窗口意外關閉

[英]Pop-up window unwantedly closes after submitting a form

當我嘗試找到解決問題的方法時,我只會遇到遇到與我相反的問題的人。

我正在加載帶有JavaScript的彈出式div。 在div內,我正在運行PHP表單。 我的問題是,每當我提交表單時,我的彈出div都會自動關閉。 我希望提交后彈出窗口在彈出div內顯示PHP-echo時保持可見。

我對javascript和PHP都非常陌生,盡管我試圖找出問題出在哪里(我假設問題出在我的javascript內),但我似乎無法找出問題所在。

這是我的Javascript,是我從istockphp.com獲得的

jQuery(function($) {

$("a.topopup").click(function() {
        loading(); // loading
        setTimeout(function(){ // then show popup, deley in .5 second
            loadPopup(); // function show popup
        }, 500); // .5 second
return false;
});

/* event for close the popup */
$("div.close").hover(
                function() {
                    $('span.ecs_tooltip').show();
                },
                function () {
                    $('span.ecs_tooltip').hide();
                }
            );

$("div.close").click(function() {
    disablePopup();  // function close pop up
});

$(this).keyup(function(event) {
    if (event.which == 27) { // 27 is 'Ecs' in the keyboard
        disablePopup();  // function close pop up
    }
});

$("div#backgroundPopup").click(function() {
    disablePopup();  // function close pop up
});

$('a.livebox').click(function() {
    alert('Hello World!');
return false;
});

 /************** start: functions. **************/
function loading() {
    $("div.loader").show();
}
function closeloading() {
    $("div.loader").fadeOut('normal');
}

var popupStatus = 0; // set value

function loadPopup() {
    if(popupStatus == 0) { // if value is 0, show popup
        closeloading(); // fadeout loading
        $("#toPopup").fadeIn(0500); // fadein popup div
        $("#backgroundPopup").css("opacity", "0.7"); // css opacity, supports IE7, IE8
        $("#backgroundPopup").fadeIn(0001);
        popupStatus = 1; // and set value to 1
        actionResponse.setWindowState(LiferayWindowState.EXCLUSIVE);
    }
}

function disablePopup() {
    if(popupStatus == 1) { // if value is 1, close popup
        $("#toPopup").fadeOut("normal");
        $("#backgroundPopup").fadeOut("normal");
        popupStatus = 0;  // and set value to 0
    }
}
/************** end: functions. **************/
}); // jQuery End

這是我的PHP:

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Contactformulier'; 
$to = 'info@mywebsite.nl'; 
$subject = $_POST['subject'];
$human = $_POST['human'];

$body = "Afzender:\n $name\n\n E-Mail:\n $email\n\n Onderwerp:\n $subject\n\n Bericht:\n $message";

if ($_POST['submit']) {
    if ($name != '' && $email != '') {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
            } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>You answered the anti-spam question incorrectly!</p>';
    }
    } else {
        echo '<p>You need to fill in all required fields!!</p>';
    }
}

頁面是否重新加載,因此彈出窗口關閉? 如果是這樣,則需要防止表單的“提交”按鈕的默認行為。

表單提交后,頁面將重新加載。 基本上,您有兩個選項可防止彈出窗口消失。

正如Jay Kravetz所建議的那樣,一種選擇是阻止默認表單提交並將其轉換為Ajax請求。 您需要提交到“ test2.php”:

<form action="test2.php" method="post">

然后,test2.php將僅在“ toPopup” div內包含HTML。

然后,您將按照本SO文章中所述使用jQuery ajax表單提交,以避免由於表單提交而重新加載頁面。

第二個選項是更改test.php,以便在里面

if ($_POST['submit']) {
  echo '<div id="popup_content" class="showImmediately">';
  //other logic here
} else {
  echo '<div id="popup_content">';
}

然后在您的CSS中,添加:

.showImmediately { display: block !important; }

除了CSS,您還可以在jQuery函數的底部添加此代碼:

if ($('.showImmediately').length > 0) {
    loading(); // loading
    setTimeout(function(){ // then show popup, deley in .5 second
        loadPopup(); // function show popup
    }, 500); // .5 second
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM