JQueryにフォームをその場で作成して送信する方法はありますか。
以下のようなもの。
<html>
<head>
<title> Title Text Goes Here </title>
<script src="http://code.jquery.com/jquery-1.7.js"></script>
<script>
$(document).ready(function(){alert('hi')});
$('<form/>').attr('action','form2.html').submit();
</script>
</head>
<body>
Content Area
</body>
</html>
これは機能するはずですか、これを行う別の方法がありますか?
コードに2つの問題がありました。 1つ目は、$(document).ready();
を含めましたが、それを使用して要素を作成しているjQueryオブジェクトをラップしなかったことです。
2つ目は、使用している方法です。 jQueryは、セレクター(または通常はセレクターを配置する場所)を作成する要素で置き換えたときに、任意の要素を作成します。次に、それを本文に追加して送信します。
$(document).ready(function(){
$('<form action="form2.html"></form>').appendTo('body').submit();
});
こちら 実行中のコード。この例では、フォーム要素が追加されることを証明するためだけに、自動送信しません。
こちら 自動送信のコード。それはうまくいきます。 Jsfiddleを使用すると、「form2.html」がサーバー上に存在しないため、404ページが表示されます。
はい、可能です。解決策の1つを以下に示します( 証明としてのjsfiddle )。
HTML:
<a id="fire" href="#" title="submit form">Submit form</a>
(参照、上記のフォームはありません)
JavaScript:
jQuery('#fire').click(function(event){
event.preventDefault();
var newForm = jQuery('<form>', {
'action': 'http://www.google.com/search',
'target': '_top'
}).append(jQuery('<input>', {
'name': 'q',
'value': 'stack overflow',
'type': 'hidden'
}));
newForm.submit();
});
上記の例は、フォームの作成方法、入力の追加方法、および送信方法を示しています。結果の表示がX-Frame-Options
で禁止されている場合があるため、メインウィンドウのコンテンツを置き換えるtarget
を_top
に設定しました。または、_blank
を設定すると、新しいウィンドウ/タブ内に表示できます。
JQueryのないMyバージョンで、シンプルな機能をオンザフライで使用できます
関数:
function post_to_url(path, params, method) {
method = method || "post";
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();
}
使用法:
post_to_url('fullurlpath', {
field1:'value1',
field2:'value2'
}, 'post');
Purmouに似ていますが、送信時にフォームを削除します。
$(function() {
$('<form action="form2.html"></form>').appendTo('body').submit().remove();
});
はい、引用符を忘れてしまいました...
$('<form/>').attr('action','form2.html').submit();
Josepmraの例は、必要なものに適しています。しかし、私は行を追加する必要がありました
form.appendTo( document.body )
それが機能するために。
var form = $(document.createElement('form'));
$(form).attr("action", "reserves.php");
$(form).attr("method", "POST");
var input = $("<input>")
.attr("type", "hidden")
.attr("name", "mydata")
.val("bla" );
$(form).append($(input));
form.appendTo( document.body )
$(form).submit();
このコードで試してみてくださいそれは完全に動的なソリューションです
var form = $(document.createElement('form'));
$(form).attr("action", "reserves.php");
$(form).attr("method", "POST");
var input = $("<input>").attr("type", "hidden").attr("name", "mydata").val("bla");
$(form).append($(input));
$(form).submit();