2012-10-21 47 views
14

Tôi đang cố gắng tạo biểu mẫu và gửi biểu mẫu đó ngay lập tức bằng javascript và tôi không thể hiểu được mình đang làm gì sai. đây là mã của tôi:tạo và gửi biểu mẫu với 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

vấn đề gì được bạn có? – SLaks

+3

bạn đã tạo thành phần biểu mẫu đúng cách. nhưng điều gì đã xảy ra với đầu vào? nó nên được thực hiện theo cùng một cách quá! Ngoài ra, chỉ cần nhận thấy, bạn đã thêm biểu mẫu, và sau đó thay đổi thuộc tính của nó, và cũng có thể, không bao giờ phụ thêm element1,2 để tạo thành! tổng thể, nó khá nhiều điều sai lầm! tại sao không sử dụng xhr thay thế? – Prasanth

+1

Bạn có thể sử dụng 'form.innerHTML + =" ";' Nhưng khi @goldenparrot chỉ ra, bạn đang sử dụng 'document.createElement 'không chính xác. –

Trả lời

50

Vấn đề là createElement không chấp nhận HTML. Nó chấp nhận một tên tag và trả về một phần tử DOM. Sau đó, bạn có thể đặt thuộc tính value trên phần tử này thành những gì bạn yêu cầu.

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

Tốt hơn để nối biểu mẫu vào tài liệu sau khi gắn các đầu vào vào nó để DOM chỉ được cập nhật một lần. Ngoài ra, để thành công, các điều khiển biểu mẫu phải có tên hoặc chúng sẽ không được gửi. – RobG

+0

Đã cập nhật, cảm ơn. –

+1

thx yall! trang web này thật tuyệt vời. – user1760150

4

Mã đã sửa đổi: 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

Bạn cũng có thể thực hiện phản ứng Saurabh Chauhan nhưng không có thêm các yếu tố dinamic để cơ thể Giải pháp này là tất cả các giải pháp dinamic.

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

tôi đã tạo ra một chức năng để làm điều này:

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

Cách sử dụng cho câu hỏi:

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