0

更新- 次のリンクを html フォームに追加しました。クリックすると、 form.submit() が正常に機能します。

<a href="#" onClick="post_to_url('abc');">click</a>

form.submit() は、キープレスをキャプチャするときにのみ機能しません。

更新 2 - event.keyCode == 27 を event.keyCode == 65 に変更しました。「A」キーを押すと、submit() が機能します。したがって、問題はエスケープキーとの干渉にあります。何か案は?

更新 3 - 解決済み - 解決策は、以下のコードで keydown を keyup に変更することです

更新終了

私の目標は、ユーザーのエスケープ キーを押して、新しい URL に移動することです。エスケープキーを正常にキャプチャし、渡された URL で送信するフォームをオンザフライで作成する関数を呼び出しました。URL が alert() で正しく渡されたことを確認しましたが、フォームが送信されません。何が機能していないのかわかりません。前もって感謝します。

エスケープ キーをキャプチャするキー ハンドラは次のとおりです (注: 解決策は、以下のコードで keydown を keyup に変更することです。投稿の完全性のためにそのままにしておきます)。

<script type="text/javascript">
window.addEventListener("keydown", function(event) {
    // Bind to both command (for Mac) and control (for Win/Linux)
    if (event.keyCode == 27) {          
    if (document.getElementById('url')){
        path = document.getElementById('url').value;
        post_to_url(path);
    }
    }
}, false);
</script>

投稿するフォームを作成する関数は次のとおりです。

<script type="text/javascript">
function post_to_url(path, params, method) {
method = method || "post"; // Set method to post by default if not specified.
// The rest of this code assumes you are not using a library.
// It can be made less wordy if you use one.
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var key in params) {
    if(params.hasOwnProperty(key)) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);

        form.appendChild(hiddenField);
     }
}

document.body.appendChild(form);
form.submit();
}
</script>

この例を完成させるために、HTML コードを含めています。

<body>
    <form id = 'close' action='' method="POST">
        <input id="url" type="text" value="urlHere">
        <input type="submit" name="OK">
        <!--when clicking on this - form.submit() works as it should -->
        <a href="#" onClick="post_to_url('abc');">click</a>
    </form>
</body>
4

2 に答える 2

0

最後に、「keydown」を「keyup」に変更しました。とても簡単です - 何時間もかかりました。最終的なリスナー コードは次のとおりです。必要に応じて、url パス以外のパラメーターを post_to_url() に渡しませんでした。パラメータを渡したいと思うでしょう。上記の Moje の例を見ることができます。

<script type="text/javascript">
window.addEventListener("keydown", function(event) {
    // Bind to both command (for Mac) and control (for Win/Linux)
    if (event.keyCode == 27) {          
    if (document.getElementById('url')){
        path = document.getElementById('url').value;
        post_to_url(path);
    }
    }
}, false);
</script>
于 2013-08-16T06:34:04.500 に答える
0

paramsまず、 を呼び出すときに引数を渡していることを確認してくださいpost_to_url。これは、キーダウン イベント ハンドラー内では発生しないようです。次に、データを送信するスクリプトをポイントする
値を確認します。3 番目に、引数がメンバー/キーを持つ js オブジェクトである ことを確認します。: 提出するためにフォームをドキュメントに追加する必要はありません。EDIT上記のチェックリストを実行した後、次のコードが機能するはずです.....document.getElementById('url').value
params



var prm = {"ABC":"123"}//object to be submitted

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default if not specified.
    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) 
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);
            form.appendChild(hiddenField);
         }
    form.submit();
}

window.addEventListener("keydown", function(event) {
    // Bind to both command (for Mac) and control (for Win/Linux)
    if (event.keyCode == 27) {          
        post_to_url("index.php",prm);//swap index.php with your url, for prm, see above
    }
}, false);
于 2013-08-16T01:57:22.117 に答える