2012-05-03 30 views
5

Tôi có một đa chọn thả xuống ví dụ:Nhận tùy chọn nhấp trong nhiều thả xuống

<select id="myList" multiple="multiple"> 
    <option value="1">Opt #1</option> 
    <option value="2" selected="selected">Opt #2</option> 
    <option value="3" selected="selected">Opt #3</option> 
    <option value="4">Opt #4</option> 
</select> 

Nếu tôi sau đó chọn Opt #4, làm cách nào thì chỉ nhận được Opt #4 và không Opt #2Opt #3? Tôi biết tôi có thể nhận được tất cả các tùy chọn đã chọn bằng cách này:

var selectedOptions = $("#myList option:selected"); 

Tuy nhiên tôi chỉ muốn tùy chọn tôi đã nhấp - Opt #4. Điều này có thể không?

Chỉnh sửa: lưu ý rằng khi tôi thao tác danh sách bên trong sự kiện change tôi không thể thực hiện trong sự kiện click. Cũng đã thêm nhiều bị thiếu.

+0

Bạn muốn đạt được điều gì? Nếu bạn muốn nhận được tùy chọn "nhấp vào", tại sao lại là một lựa chọn đa? – MatuDuke

+2

Bạn có bỏ lỡ thêm thuộc tính 'multiple' để chọn thẻ không? –

+0

Bạn đã bỏ thuộc tính 'mulitple =" multiple "' khỏi 'select'. Khác hơn là nó sẽ làm việc. – phuzi

Trả lời

7

Bạn có thể nhận được nó trong xử lý nhấp chuột cho mỗi yếu tố tùy chọn:

$("#myList option").click(function() { 
    var clickedOption = $(this); 
}); 

Cập nhật

EDIT: Như tôi đã vận dụng danh sách bên trong một sự kiện thay đổi, tôi có thể không làm điều đó trong một sự kiện nhấp chuột.

Trong trường hợp đó, bạn cần ủy quyền sự kiện bằng cách sử dụng on. Hãy thử điều này:

$("#myList").on("click", "option", function() { 
    var clickedOption = $(this); 
}); 
+0

Điều này sẽ thêm một trình xử lý sự kiện duy nhất cho mỗi tùy chọn. Nếu bạn đã thêm các tùy chọn sau khi gọi, tùy chọn mới sẽ không hoạt động như mong đợi. Hãy xem giải pháp của tôi về cách tránh vấn đề này. –

+0

Tôi quên đề cập đến rằng tôi thao tác danh sách bên trong một sự kiện thay đổi, vì vậy tôi không thể làm điều đó trong một sự kiện nhấp chuột. – Frets

+0

@ Rất tiếc, hãy kiểm tra cập nhật của tôi. –

1

Như bạn đã biết, Nếu người dùng nhấp vào lựa chọn số 4 mà không nhấn phím Cntrl, thì bạn sẽ chỉ nhận được tùy chọn 4 là tùy chọn được chọn.

Nếu người dùng nhấp vào lựa chọn số 4 có nhấn phím Cntrl thì tất cả ba tùy chọn sẽ được chọn. Vì vậy, tất cả ba tùy chọn sẽ được trả lại. Nếu bạn muốn chỉ chọn # 4, thì bạn sẽ cần thêm trình xử lý sự kiện nhấp chuột.

1

Điều gì đó như sau sẽ giúp bạn?

$('#myList').delegate('option', 'click', function (opt) { 
    alert('Option ' + opt.value + ' was clicked'); 
}); 
Các vấn đề liên quan