0

我使用 Pure JS 首先阻止表单提交,然后我有一些验证代码,最后是自动提交,但数据没有从客户端传递到服务器脚本。

这是HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Chat Room</title>
    <link type="text/css" href="main.css" rel="stylesheet" />
    <script type="text/javascript" src="main.js"></script>
</head>
<body>
    <div id="container" class="add-nick">
        <h3>Enter Your Name</h3>
        <form action="chat.php" method="post" id="add-nicki">
            <input type="text" placeholder="At least 6 alphabets e.g. Jackson" class="text" name="name" />
            <input type="submit" value="Submit" class="submit" name="btnsubmit" />
        </form>
    </div>
</body>
</html>

JS:

window.onload = function() {
    document.forms[0].onsubmit = function(e) {
        e.preventDefault();
        var regexp = new RegExp("^[A-Za-z]+$"),
        elem = this.elements[0],
        value = elem.value;
        if(regexp.test(value) && typeof value != "null" && value.length > 5) {
            elem.className = "text correct";
            var formElem = this;
            setTimeout(function() { formElem.submit(); }, 0);
        }
        else elem.className = "text wrong";
    };
};

PHP 文件:

<?php
session_start();

if(isset($_POST['btnsubmit'])) {
    $_SESSION['name'] = $_POST['name'];
    echo $_SESSION['name'];
}
else {
    if(!isset($_SESSION['name']))
        echo "Header";
    else
        echo $_SESSION['name'];
}


?>

是否有问题或 JSsubmit功能无法正常运行?

4

1 回答 1

1

与提交按钮对应的请求参数仅在表单作为单击该按钮的结果提交时才被传递。这里不是这种情况,因为您抑制了原始表单提交(由按钮触发的表单),然后formElem.submit()从 JavaScript 调用;没有按钮单击意味着没有请求参数,因此isset($_POST['btnsubmit'])在您的 PHP 脚本中永远不会返回 true。

一种解决方案可能是btnsubmit在提交之前将参数添加到表单的操作中:

formElem.action += (formElem.action.indexOf('?') == -1 ? '?btnsubmit=Submit' : '&btnsubmit=Submit');
于 2013-09-06T09:29:16.523 回答