2012-10-21 48 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");