2012-10-21 69 views
14

我正嘗試創建一個表單並使用JavaScript立即提交,我無法弄清楚我做錯了什麼。這裏是我的代碼:使用javascript創建並提交表單

function autoLogIn(un, pw) { 
var form = document.createElement("form"); 
document.body.appendChild(form); 
form.method = "POST"; 
form.action = "login.php"; 
var element1 = document.createElement("<INPUT NAME='un' TYPE='hidden' VALUE='"+un+"'>"); 
form.appendChild(element1); 
var element2 = document.createElement("<INPUT NAME='pw' TYPE='hidden' VALUE='"+pw+"'>"); 
form.appendChild(element2); 
form.submit(); 
} 
+0

您有什麼問題? – SLaks

+3

您正確創建了表單元素。但是輸入發生了什麼?它也應該以同樣的方式完成!另外,剛剛注意到,您正在追加表單,然後更改它的屬性,並且也不會將元素1,2附加到表單中!總的來說,這非常糟糕!爲什麼不使用xhr呢? – Prasanth

+1

你可以使用'form.innerHTML + =「」;'但是@goldenparrot指出,你正在使用'document.createElement '不正確。 –

回答

50

問題是,createElement不接受HTML。它接受一個標記名並返回一個DOM元素。然後,您可以將此元素上的值屬性設置爲您所需的值。

function autoLogIn(un, pw) { 
    var form = document.createElement("form"); 
    var element1 = document.createElement("input"); 
    var element2 = document.createElement("input"); 

    form.method = "POST"; 
    form.action = "login.php"; 

    element1.value=un; 
    element1.name="un"; 
    form.appendChild(element1); 

    element2.value=pw; 
    element2.name="pw"; 
    form.appendChild(element2); 

    document.body.appendChild(form); 

    form.submit(); 
} 
+1

在將輸入附加到文檔後更好地將該表單附加到文檔中,以便DOM僅更新一次。另外,要成功,表單控件必須有名稱或不會被髮送。 – RobG

+0

更新,謝謝。 –

+1

thx yall!這個網站是可笑的真棒。 – user1760150

4

修改代碼:jsfiddle

function autoLogIn(un, pw) { 
    var form = document.createElement("form"); 
    document.body.appendChild(form); 
    form.method = "POST"; 
    form.action = "login.php"; 
    var element1 = document.createElement("INPUT");   
    element1.name="un" 
    element1.value = un; 
    element1.type = 'hidden' 
    form.appendChild(element1); 
    var element2 = document.createElement("INPUT");   
    element2.name="pw" 
    element2.value = pw; 
    element2.type = 'hidden' 
    form.appendChild(element2); 
    form.submit(); 
} 
2

你也可以做Saurabh Chauhan的反應,但不添加動態元素到身體這個解決方案是所有動態解決方案。

var myform = document.createElement("form"); 
    myform.action = "myForm.aspx"; 
    myform.method = "post"; 


    product = document.createElement("input"); 
    product.value = "value"; 
    product.name = "name"; 

    myform.appendChild(product); 
    myform.submit(); 
0

我創建了一個函數來做到這一點:

function PostDataRedirect(data, dataName, location) { 
var form = document.createElement("form"); 

form.method = "POST"; 
form.action = location; 

if (data.constructor === Array && dataName.constructor === Array) { 
    for (var i = 0; i < data.length; i++) { 
     var element = document.createElement("input"); 
     element.type = "hidden"; 
     element.value = data[i]; 
     element.name = dataName[i]; 
     form.appendChild(element); 
    } 
} else { 
    var element1 = document.createElement("input"); 
    element1.type = "hidden"; 
    element1.value = data; 
    element1.name = dataName; 
    form.appendChild(element1); 
} 

document.body.appendChild(form); 

form.submit(); 
} 

用途的問題:

PostDataRedirect([ un, pw ], ["un", "pw"], "login.php");