2008-12-11 33 views
78

Đối với DropDownList này trong HTML:Tôi có thể mở một DropDownList sử dụng jQuery

<select id="countries"> 
<option value="1">Country</option> 
</select> 

Tôi muốn để mở danh sách (giống như nhấp chuột trái trên nó). Điều này có thể sử dụng JavaScript (hoặc đặc biệt hơn jQuery) không?

+1

bản sao có thể có của [Làm thế nào bạn có thể cho biết một cách HTML lập trình để thả xuống (ví dụ: do di chuột qua)?] (Http://stackoverflow.com/questions/249192/how -can-you-programmatically-tell-an-html-select-to-drop-down-for-example-do) –

+3

Bất cứ ai có thể giải thích lý do tại sao điều này là không thể? – SpaceBeers

+0

checkout http://api.jqueryui.com/selectmenu/#method-open –

Trả lời

13

Bạn có thể dễ dàng simulate a click on an element, nhưng một nhấp chuột vào một <select> sẽ không mở ra thả xuống.

Sử dụng nhiều lựa chọn có thể có vấn đề. Có lẽ bạn nên xem xét các nút radio bên trong phần tử vùng chứa mà bạn có thể mở rộng và hợp đồng khi cần.

2

Nó không phải là có thể cho javascript để "click" vào một yếu tố (u có thể kích hoạt các đính kèm onclick sự kiện, nhưng bạn có thể không theo nghĩa đen nhấp vào nó)

Để xem tất cả các mục trong danh sách, làm cho liệt kê một danh sách multiple và tăng kích thước của nó, giống như ví dụ:

<select id="countries" multiple="multiple" size="10"> 
<option value="1">Country</option> 
</select> 
+0

Thêm thanh cuộn sau 4 mục trong IE6, 7 & 8b2 và Opera 9.62. Thêm thanh cuộn sau 10 mục trong Safari dành cho Windows và Google Chrome. –

1

Như đã nêu, bạn không thể lập trình mở một mã số sử dụng JavaScript <select>. Tuy nhiên, bạn có thể tự viết <select> quản lý toàn bộ giao diện của chính mình Nội dung giống như những gì bạn thấy cho cụm từ tìm kiếm tự động hoàn thành trên hộp Google hoặc Yahoo! hoặc hộp Tìm kiếm vị trí tại The Weather Network.

Tôi đã tìm thấy một cho jQuery here. Tôi không biết liệu nó có đáp ứng được nhu cầu của bạn hay không, nhưng ngay cả khi nó không hoàn toàn đáp ứng nhu cầu của bạn, bạn có thể sửa đổi nó để nó sẽ mở ra như là kết quả của một hành động hay sự kiện nào đó. This one thực sự trông có vẻ hứa hẹn hơn.

2

Không, bạn không thể.

Bạn có thể thay đổi kích thước để làm cho kích thước lớn hơn ... tương tự như ý tưởng Dreas, nhưng đó là kích thước bạn cần thay đổi.

<select id="countries" size="6"> 
    <option value="1">Country 1</option> 
    <option value="2">Country 2</option> 
    <option value="3">Country 3</option> 
    <option value="4">Country 4</option> 
    <option value="5">Country 5</option> 
    <option value="6">Country 6</option> 
</select> 
65

Tôi đã cố gắng tìm thấy điều tương tự và đã thất vọng. tôi đã kết thúc thay đổi kích thước thuộc tính cho hộp chọn để nó xuất hiện để mở

$('#countries').attr('size',6); 

và sau đó khi bạn đã hoàn tất

$('#countries').attr('size',1); 
+12

thêm thuộc tính 'size' vào danh sách thả xuống thực sự chuyển đổi danh sách thả xuống thành ListBox..nó mở rộng .. –

+0

Giải pháp tuyệt vời. Bạn chỉ phải đối phó với thực tế là hộp danh sách chiếm nhiều không gian hơn trên trang (thay vì mở rộng trên nội dung như một trình đơn thả xuống) và, do đó, đẩy nội dung xuống. – zkent

+0

Đối với những người chỉ có thể tưởng tượng nó trông như thế nào, sự xuất hiện là một hộp chọn nhiều sau khi sử dụng phương pháp này (nhưng không thể chọn nhiều) mà cá nhân tôi nghĩ là ổn định hơn là mở menu thả xuống. – Siwei

15

tôi đã đi qua cùng một vấn đề và tôi có một dung dịch. Một hàm gọi là ExpandSelect() mô phỏng click chuột vào phần tử "select", nó làm như vậy bằng cách tạo ra một phần tử <select> khác được đặt hoàn toàn và có nhiều tùy chọn cùng một lúc bằng cách thiết lập thuộc tính size. Thử nghiệm trong tất cả các trình duyệt chính: Chrome, Opera, Firefox, Internet Explorer. Giải thích cách hoạt động, cùng với mã tại đây:

Chỉnh sửa (liên kết bị hỏng).

tôi đã tạo ra một dự án tại Google Code, đi cho đoạn code đó:

http://code.google.com/p/expandselect/

Ảnh chụp màn hình

Có một sự khác biệt nhỏ trong GUI khi bắt chước cú nhấp chuột, nhưng nó không thực sự vấn đề, nhìn thấy nó cho chính mình:

Khi nhấp chuột:

MouseClicking http://expandselect.googlecode.com/hg/mouseclick_manyoptions.jpg

Khi bắt chước nhấp chuột:

EmulatingClicking http://expandselect.googlecode.com/hg/emulateclick_manyoptions.jpg

Nhiều ảnh chụp màn hình trên trang web của dự án, liên kết ở trên.

+2

Bạn có thể đăng jsfiddle cho điều này không? –

5

Đơn giản một cách dễ dàng.

function down(what) { 
    pos = $(what).offset(); // remember position 
    $(what).css("position","absolute"); 
    $(what).offset(pos); // reset position 
    $(what).attr("size","10"); // open dropdown 
} 

function up(what) { 
$(what).css("position","static"); 
$(what).attr("size","1"); // close dropdown 
} 

Bây giờ bạn có thể gọi thả xuống bạn chỉ cần như thế này

<select onfocus="down(this)" onblur="up(this)"> 

Làm việc hoàn hảo cho tôi.

Có thể tốt hơn, bởi vì bạn không có vấn đề gì với vị trí của các elem khác trên trang.

function down(was) { 
a = $(was).clone().attr('id','down_man').attr('disabled',true).insertAfter(was); 
$(was).css("position","absolute").attr("size","10"); 
} 

function up(was) { 
$('#down_man').remove(); 
$(was).css("position","static"); 
$(was).attr("size","1"); 
} 

Thay đổi ID thành giá trị cố định nhưng không phải thông minh nhưng tôi hy vọng bạn thấy người nhận diện.

2

Tôi đã thử sử dụng câu trả lời của mrperfect và tôi đã có một vài trục trặc. Với một vài thay đổi nhỏ, tôi đã có thể làm cho nó hoạt động cho tôi. Tôi chỉ thay đổi nó để nó sẽ chỉ làm điều đó một lần. Khi bạn thoát khỏi menu thả xuống, nó sẽ quay trở lại phương thức thả xuống thông thường.

function down() { 
    var pos = $(this).offset(); // remember position 
    $(this).css("position", "absolute"); 
    $(this).offset(pos); // reset position 
    $(this).attr("size", "15"); // open dropdown 
    $(this).unbind("focus", down); 
} 
function up() { 
    $(this).css("position", "static"); 
    $(this).attr("size", "1"); // close dropdown 
    $(this).unbind("change", up); 
} 
function openDropdown(elementId) { 
    $('#' + elementId).focus(down).blur(up).focus(); 
} 
2

Một điều mà điều này không trả lời là điều xảy ra khi bạn nhấp vào một trong các tùy chọn trong danh sách lựa chọn sau khi bạn đã thực hiện kích thước = n và đặt vị trí tuyệt đối.

Bởi vì sự kiện mờ làm cho nó size = 1 và thay đổi nó trở lại cách hiển thị, bạn nên có một cái gì đó như thế này cũng

$("option").click(function(){ 
    $(this).parent().blur(); 
}); 

Ngoài ra, nếu bạn đang gặp vấn đề với cái tuyệt đối vị trí chọn danh sách hiển thị phía sau các phần tử khác, chỉ cần đặt một số

z-index: 100; 

hoặc tương tự như kiểu đó.

7

Điều này được tạo ra từ các câu trả lời ở trên và sử dụng độ dài/số tùy chọn để phù hợp với số lượng tùy chọn thực tế.

Hy vọng điều này sẽ giúp ai đó nhận được kết quả mà họ cần!

function openDropdown(elementId) { 
     function down() { 
      var pos = $(this).offset(); // remember position 
      var len = $(this).find("option").length; 
       if(len > 20) { 
        len = 20; 
       } 

      $(this).css("position", "absolute"); 
      $(this).css("zIndex", 9999); 
      $(this).offset(pos); // reset position 
      $(this).attr("size", len); // open dropdown 
      $(this).unbind("focus", down); 
      $(this).focus(); 
     } 
     function up() { 
      $(this).css("position", "static"); 
      $(this).attr("size", "1"); // close dropdown 
      $(this).unbind("change", up); 
      $(this).focus(); 
     } 
     $("#" + elementId).focus(down).blur(up).focus(); 
    } 
2

siêu đơn giản:

var state = false; 
$("a").click(function() { 
    state = !state; 
    $("select").prop("size", state ? $("option").length : 1); 
}); 
+1

không giống như mở nó. khi hộp danh sách nằm ở cuối trang, nếu tôi mở nó, nó sẽ mở ra phía trên. nếu tôi thay đổi kích thước của nó, nó "mở" xuống dưới, dưới đây tôi có thể nhấp vào. không tốt – ekkis

+0

@ekkis Hành vi được giải thích có thể khác nhau trên các thiết bị và trình duyệt khác nhau. Tôi đã thử nghiệm giải pháp được đề xuất của mình với Firefox, Google Chrome và Opera trên máy tính để bàn và Safari trên thiết bị di động, nơi nó hoạt động như mong đợi. Bước nhảy có thể dễ dàng sửa bằng cách lưu/khôi phục độ lệch cuộn khi mở/đóng hoặc có thể bằng cách sử dụng ['scrollIntoView'] (https://developer.mozilla.org/docs/Web/API/Element/scrollIntoView) trên '