HTML表单 - 成功发布表单但不离开页面(NO-JQUERY)

时间:2017-04-26 16:38:23

标签: javascript html forms

我在弹出窗口中有一个简单的表单。在我的表单中,我只有一个带复选框标签的复选框。我所做的是当用户点击标签或复选框时,出现提交按钮,用户将能够提交表单。此外,我想当用户按下提交按钮收集我的数据库中的信息,然后关闭弹出窗口并继续在网站上正常而不离开。我不知道如何实现这一目标,但这是我迄今为止所做的。我需要一些帮助来实现这一目标。

1)我想成功提交表单并将信息收集到我的数据库中。 2)我想关闭PopUp窗口。 3)我不想离开页面。

感谢。

HTML:

<div id="popUp">
      <form id="myform" method="post" action="somepage.php" onsubmit="return closeWindow">
         <input type="checkbox" id="checkbox" name="checkbox"><label for="checkbox">Click to show Submit</label><br>
         <input type="submit" id="submit-button" value="Submit" style="display:none">
     </form>
   </div>

CSS:

#popUp {
    height:400px;
    border:1px solid #000;
    background:#e2e2e2;
}

JS:

var checkBox = document.getElementById("checkbox");
var submitButton = document.getElementById("submit-button");
var PopUpWindow = document.getElementById("popUp");

function checboxFunc() {
    if (checkBox.checked) {
        submitButton.style.display = "block";
    } else {
        submitButton.style.display = "none";
    }
}
checkBox.addEventListener("click", checboxFunc);


function closeWindow() {
    PopUpWindow.style.display = "none";
    return false;
}
submitButton.addEventListener("click", closeWindow);

2 个答案:

答案 0 :(得分:1)

虽然您可以使用AJAX,但更简单的方法是将表单放在另一个HTML文件中并将其加载到iframe并设置表单target="name_of_iframe"

您还必须删除onsubmit属性,而是添加一个事件侦听器。像这样。

<强> yourpage.html

<iframe id="popUp" name="popup" src="path/to/form.html"></iframe>

<强> form.html

<form id="myform" method="post" action="somepage.php" target="popup">
    <input type="checkbox" id="checkbox" name="checkbox"><label for="checkbox">Click to show Submit</label><br>
    <input type="submit" id="submit-button" value="Submit" style="display:none">
</form>

<强> yourpage.js

var checkBox = document.getElementById("checkbox");
var submitButton = document.getElementById("submit-button");
var PopUpWindow = document.getElementById("popUp");
var form = document.getElementById("myform");

function checboxFunc() {
    if (checkBox.checked) {
        submitButton.style.display = "block";
    } else {
        submitButton.style.display = "none";
    }
}
checkBox.addEventListener("click", checboxFunc);


function closeWindow() {
    PopUpWindow.style.display = "none";
    return false;
}
form.addEventListener("submit", closeWindow);

提交此内容后,somepage.php将加载,但仅在弹出窗口内,无论如何都将隐藏。所以你会有所期望的效果。

答案 1 :(得分:0)

Ajax是为解决这个问题而发明的。 Jquery很好地包装了它:

结帐$.post

两个建议,如果您正在执行此类请求,请不要使问题复杂化并使用FORM标记,只需使用输入。 其次发送JSON而不是表单数据,可能会弄乱,试图获得正确的格式。

所以你的客户端看起来像这样:




    var req_obj = {
        "id":"ENTER_DATA",
        "params":{
            "param_name1":"param_val1",
            "param_name2":"param_val2"
        }
    };

    $.post(
        APP.ActionUrl,
        JSON.stringify(req_obj),
        function(data){ //this is the callback,do your confirmation msg },
        "json");

SERVER:



    $req_obj = json_decode(get_post_data());
        $param1 = $req_obj->params->param_name1;


        function get_post_data(){
            $buf = '';

            if(($h_post = fopen('php://input','r'))){
                while(!feof($h_post))
                    $buf .= fread($h_post,1024);

                fclose($h_post);
                return $buf;
            }
            else
                return false;
        }