2011-08-23 15 views
7

Khi hiển thị trang, val() của một lựa chọn nhiều được đặt bằng một giá trị. Ví dụ: $("#my_select_box").val(1); Sau đó, người dùng chọn một giá trị bổ sung trong hộp chọn nhiều.Html: Đối với Chọn nhiều, chỉ có một giá trị được gửi nhưng .val() trả về mảng của hai giá trị

Khi biểu mẫu được gửi, chỉ giá trị mới được chọn mới được gửi chứ không phải giá trị được chọn trước đó. Trong khi trong khi gỡ lỗi trong Firefox, hàm .val() trả về một mảng gồm hai giá trị (cả hai giá trị trước đó và giá trị mới được chọn). Lý do tại sao điều này xảy ra?

Trả lời

2

Vâng, không có mã, chúng tôi không thể chắc chắn. Nhưng khi bạn muốn nhiều tham số được truyền vào, bạn phải đưa ra một giá trị tên của đầu vào đó vào dấu ngoặc []. Ví dụ "name []" để máy chủ biết rằng có hai giá trị thực tế.

0

Khó để biết phải làm gì nếu không có mã.

Tuy nhiên, nếu bạn muốn cả option mà bạn đánh dấu selected và phần còn lại được lựa chọn, bạn có thể truy cập chúng như sau:

option[selected="selected"] cho người mình thiết

option:selected cho người được chọn bởi người dùng

Vì vậy, một cái gì đó như thế này ...

$('#submit').click(function(){ 
    var s = $('#my_select_box option[selected="selected"]').val(); 
    var t = $('#my_select_box option:selected').val(); 
    alert("Set: " + s + ", Chosen: " + t); 
}); 

Ví dụ: http://jsfiddle.net/jasongennaro/pZesG/1/

18

Nếu bạn đang lập trình trong PHP, vấn đề nằm ở đó. Khi sử dụng các đầu vào đa lựa chọn, PHP yêu cầu bạn phải có một cặp ngoặc vuông trống sau tên đầu vào. Ví dụ:

<select name="select[]" multiple="multiple"> 

thay vì chỉ

<select name="select" multiple="multiple"> 

Nếu bạn không thể hoặc sẽ không làm điều này (có lẽ bạn không có quyền truy cập vào mã HTML cơ bản), sau đó bạn có thể luân phiên nắm bắt các dữ liệu POST như thế này:

$data_from_post = file_get_contents("php://input"); 
var_dump($data_from_post); 

Và bạn sẽ thấy một chuỗi như thế này mà bạn có thể sử dụng:

select=one&select=two&select=three&button=submit