2010-11-21 32 views
13

Tôi có HTML này:Làm cách nào để truy cập các giá trị được tạo bởi serializeArray trong JQuery?

<form id='myform'> 
<input name='title' value='foo'/> 
</form> 

Và tôi có thể tạo một mảng đối tượng từ nó như thế này:

var dataArray = $("#myform").serializeArray(); 

Bây giờ làm thế nào để truy cập vào 'danh hiệu' trong dataArray? Điều này không làm việc:

alert(dataArray['title']); 
alert(dataArray['title'].val()); 

Trả lời

14

Tương tự như những gì Nick đăng, nhưng một chút bụi

var dataArray = $("#myform").serializeArray(), 
    dataObj = {}; 

$(dataArray).each(function(i, field){ 
    dataObj[field.name] = field.value; 
}); 

Sau đó truy cập vào cùng một cách

alert(dataObj['title']); 
11
alert(dataArray[0].name); 
alert(dataArray[0].value); 

Vì vậy:

for (i=0; i<dataArray.length; i += 1) { 
    if (dataArray[i].name === "title") { 
     // do something here... 
    } 
} 
+0

Xin cảm ơn, nhưng nếu tôi có nhiều trường nhập liệu và tôi không muốn dựa vào thứ tự? – bart

+2

Bạn không dựa vào thứ tự tên là id và giá trị là giá trị, chúng không nằm trong một đối tượng như bạn mong đợi, bạn sẽ cần phải lặp qua mảng và xử lý những thứ khi bạn gặp chúng . – Tom

2

Run console.log(dataArray);, sau đó mở ra các thanh tra tài sản, và đánh dấu vào giao diện điều khiển. Trong Chrome, bạn nhấp chuột phải và chọn "Kiểm tra phần tử" và sau đó nhấp vào biểu tượng "> =" đang tìm kiếm ở dưới cùng bên trái, đó là biểu tượng thứ hai từ bên trái.

Trong Firefox bạn muốn cài đặt firebug và có một tab gọi là "Console"

Không chắc chắn nếu nó có sẵn trong IE, có lẽ cái gì đó trong công cụ phát triển (nhấn f12) nhưng tôi sẽ không khuyên bạn nên phát triển trong IE.

Dù sao, điều này sẽ liệt kê đối tượng theo cách cho phép bạn điều hướng và xem giá trị của từng mục. Bằng cách đó thì bạn có thể sử dụng để giải mã làm thế nào để truy cập vào các giá trị :)

Chúc may mắn

23

Bạn có thể lặp qua, as @Tom has ... hoặc nếu bạn đang truy cập nhiều hơn một, hãy thêm một chút hiệu quả và vòng một lúc, tạo ra một đối tượng như thế này:

var dataArray = $("#myform").serializeArray(), 
    len = dataArray.length, 
    dataObj = {}; 

for (i=0; i<len; i++) { 
    dataObj[dataArray[i].name] = dataArray[i].value; 
} 

Sau đó, bạn có thể truy cập vào nó như bạn muốn, ví dụ:

alert(dataObj['title']); //or alert(dataObj.title); 

You can test it out here .

+1

Rất đẹp !!! Điều này làm việc rất độc đáo đẩy nó vào một processer php! –

1

append/echo/in dataArray[0].name đến một div sẽ cung cấp cho bạn 'tiêu đề'

1

Cảnh báo tuần tựLập các đầu vào trong myDiv (lưu ý: bộ chọn :input cũng sẽ bao gồm các thẻ chọn và thẻ văn bản!):

//alert(fData.length) // how many inputs got picked up 
var fData=$("#myDiv :input").serializeArray(); 
var msg=""; 
for(var i=0;i<fData.length;i++){ 
    var raKy=Object.keys(fData[i]); 
    msg+="\n"+raKy[0]+":"+eval("fData[i]."+raKy[0])+" "+raKy[1]+":"+eval("fData[i]."+raKy[1]); 
} 
alert(msg); 
3

Vẫn còn cách này để trợ giúp người khác trong tương lai. Cách tốt để nhanh chóng kiểm tra tất cả các giá trị.

var formdata = $("#myform").serializeArray(); 
var formdata = JSON.stringify(formdata); 
alert (formdata); 
Các vấn đề liên quan