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 が返されることはありません。

btnsubmit1 つの解決策は、フォームを送信する前にフォームのアクションにパラメーターを追加することです。

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