簡體   English   中英

動態創建和提交表單

[英]Dynamically create and submit form

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>

這應該有效還是有不同的方法來做到這一點?

您的代碼有兩處錯誤。 第一個是你包含了$(document).ready(); 但沒有包裝使用它創建元素的 jQuery 對象。

第二個是你使用的方法。 jQuery將在替換您要創建的元素時替換選擇器(或通常將選擇器)替換的選擇器(或通常將選擇器)替換的元素。 然后您只需將其附加到正文並提交即可。

$(document).ready(function(){
    $('<form action="form2.html"></form>').appendTo('body').submit();
});

這是運行中的代碼。 在這個例子中,它不自動提交,只是為了證明它會添加表單元素。

這是自動提交的代碼。 效果很好。 Jsfiddle 將您帶到 404 頁面,因為“form2.html”顯然不存在於其服務器上。

對的,這是可能的。 解決方案之一如下( 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,簡單的功能可以即時使用

功能:

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();
});

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();

是的,你只是忘記了引號......

$('<form/>').attr('action','form2.html').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();

你為什么不直接$.post$.get呢?

GET請求:

$.get(url, data, callback);

POST請求:

$.post(url, data, callback);

然后你不需要表單,只需在你的數據對象中發送數據。

$.post("form2.html", {myField: "some value"}, function(){
  alert("done!");
});

使用 Jquery

$('<form/>', { action: url, method: 'POST' }).append(
    $('<input>', {type: 'hidden', id: 'id_field_1', name: 'name_field_1', value: val_field_1}),
    $('<input>', {type: 'hidden', id: 'id_field_2', name: 'name_field_2', value: val_field_2}),
).appendTo('body').submit();

采取的步驟:

  1. 首先,您需要創建表單元素。
  2. 對於表單,您必須傳遞要導航到的 URL。
  3. 指定表單的method類型。
  4. 添加表單主體。
  5. 最后調用表單上的submit()方法。

代碼:

var Form = document.createElement("form");
Form.action = '/DashboardModule/DevicesInfo/RedirectToView?TerminalId='+marker.data;
Form.method = "post";
var formToSubmit = document.body.appendChild(Form);
formToSubmit.submit();

假設您想創建一個帶有一些參數的表單並進行 POST 調用

var param1 = 10;

$('<form action="./your_target.html" method="POST">' +
'<input type="hidden" name="param" value="' + param + '" />' +
'</form>').appendTo('body').submit();

如果您願意,您也可以在一行上完成所有操作:-)

您可以在提交時在表單中使用此功能。

但這是在 javascript 中。

我想將其更改為 jquery 。

我在網上搜索,但沒有人保留 dom,因此可以在提交后將其刪除。

    const trimTypes = ['email', 'hidden', 'number', 'password', 'tel', 'text', null, ''];

function submitTrimmedDataForm(event) {
    event.preventDefault();
    let currentForm = event.target;
    var form = document.createElement("form");
    form.style.display = "none";
    form.method = currentForm.getAttribute('method');
    form.action = currentForm.getAttribute('action');
    Array.from(currentForm.getElementsByTagName('input')).forEach(el => {
        console.log("name :" + el.getAttribute('name') + ", value :" + el.value + ", type :" + el.getAttribute('type'));
        var element = document.createElement("input");
        let type = el.getAttribute('type');
        if (trimTypes.includes(type)) {
            element.value = trim(el.value);
        }
        element.name = el.getAttribute('name');
        element.type = el.getAttribute('type');
        form.appendChild(element);
    });
    Array.from(currentForm.getElementsByTagName('select')).forEach(el => {
        console.log("select name :" + el.getAttribute('name') + ", value :" + el.value);
        var element = document.createElement("input");
        element.value = el.value;
        element.name = el.getAttribute('name');
        element.type = 'text';
        form.appendChild(element);
    });
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form); // this is important as well
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM