select2 - ẩn hộp tìm kiếm


206

Đối với các lựa chọn quan trọng hơn của tôi, hộp tìm kiếm trong Chọn2 là tuyệt vời. Tuy nhiên, trong một trường hợp, tôi có một lựa chọn đơn giản gồm 4 lựa chọn được mã hóa cứng. Trong trường hợp này, hộp tìm kiếm là thừa và trông hơi ngớ ngẩn khi có mặt. Có thể che giấu nó bằng cách nào đó? Tôi đã xem qua tài liệu trực tuyến và không thể tìm thấy bất kỳ tùy chọn nào cho việc này trong hàm tạo.

Tất nhiên, tôi có thể chỉ sử dụng một lựa chọn html thông thường, nhưng để thống nhất tôi muốn sử dụng Chọn2 nếu có thể.


Cảm ơn bạn cho ý tưởng. Mặc dù tôi đã biết về .show () và. Leather () trong jQuery, nhưng điều đó không xảy ra với tôi rằng trình cắm thêm sẽ tiếp tục hoạt động nếu tôi làm một cái gì đó giống như vậy ngoài các tùy chọn của chính nó. Tuy nhiên, thoạt nhìn, nó có vẻ hoạt động :)
EleventyOne

Bạn có thể giải thích phương thức ẩn nào và cách thức hoạt động không? Có phải bạn đang nói với tôi rằng nó chỉ ẩn hộp tìm kiếm bởi vì điều đó dường như hoàn toàn không phải là trường hợp
IcedDante

@IcedDante hidePhương thức này được mô tả ở đây: api.jquery.com/ leather Miễn là bạn chỉ áp dụng nó cho bộ chọn thích hợp thì có, nó sẽ ẩn hộp tìm kiếm một mình. Tuy nhiên, có các phương pháp dành riêng cho plugin có thể được sử dụng để ẩn nó, mà tôi khuyên bạn nên sử dụng thay thế (xem bên dưới).
EleventyOne 22/03/2015

Câu trả lời:


473

Xem chủ đề này https://github.com/ivaynberg/select2/issues/361 , bạn có thể ẩn hộp tìm kiếm bằng cách đặt minimResultsForSearch thành giá trị âm.

$('select').select2({
    minimumResultsForSearch: -1
});

14
Vấn đề chính ở đây như được đề cập trong vé trên github là trên thiết bị di động, nó vẫn hiển thị bàn phím. Chúng tôi đã thay thế select2 bằng lựa chọn.
chào hàng

2
và nó dịch hoàn hảo sang angular-ui ui-select2!
rhigdon

Tùy chọn rất tiện dụng! Tôi đã sử dụng nó để hiển thị tìm kiếm cho 10 tùy chọn và nhiều hơn nữa. Không cần thủ công loại bỏ đầu vào tìm kiếm.
blazkovicz

@KevinBrown Infinitykhông phải là một giá trị âm. Chỉnh sửa của bạn làm cho văn bản và mã không khớp. Vấn đề liên quan đến cụ thể chỉ ra rằng một giá trị âm là cách tiếp cận được hỗ trợ chính xác. Vấn đề liên quan đến cũng khẳng định "Giá trị tối thiểu caoResultsForSearch chỉ ẩn hộp tìm kiếm trong lựa chọn đã mở. Nhưng nếu chúng ta nhập một số chữ cái trong khi chọn được đóng và tập trung - tìm kiếm sẽ bật lên, bất kể cao đến đâu" và mặc dù tôi không thể tái tạo vấn đề cụ thể đó trong phiên bản hiện tại, nó có khả năng là một vấn đề thực sự trong các phiên bản cũ hơn. Vì những lý do đó, tôi đã quay lại chỉnh sửa của bạn.

1
Nhưng, nó hoàn toàn vô hiệu hóa chức năng tìm kiếm.
sudip


34
.no-search .select2-search {
    không trưng bày
}

$ ("# kiểm tra"). select2 ({
    dropdownCssClass: 'không tìm kiếm'
}); 

1
+1 Tôi thích điều này vì nó ngăn hộp tìm kiếm xuất hiện nhanh trong UI trong khi yêu cầu AJAX được thực hiện. Điều này cũng đúng với hack -1.
SimonGates

Đây chắc chắn là câu trả lời tốt nhất cho câu hỏi vì nó thực sự ngăn chặn sự kiện ui như "tìm kiếm ....".
Sarin Suriyakoon

5
Làm việc hoàn hảo, cảm ơn bạn! Chỉ cần một lưu ý cho bất kỳ Googler nào trong tương lai, điều này yêu cầu phiên bản đầy đủ select2 (select2.full. *), Như đã nêu ở đây: github.com/select2/select2/issues/2879#issuecomment-149940634
Othyn 12/2/2016

1
Cảm ơn, đó là những gì tôi đang tìm kiếm kể cả khi hộp tìm kiếm bị ẩn, nó cho phép giữ chức năng tìm kiếm khả dụng khi bạn muốn gọi nó theo chương trình: $ ("# myselect"). Select2 ("search", "search_value")
nicolas

Quả thực đây là lựa chọn tốt nhất. Như @Othyn nói rằng phiên bản đầy đủ là cần thiết select2.full.min.js như tài liệu trên trang web: select2.github.io
robbpriestley

26

Phiên bản 4.0.3

Cố gắng không trộn các yêu cầu giao diện người dùng với mã JavaScript của bạn.

Bạn có thể ẩn hộp tìm kiếm trong phần đánh dấu bằng thuộc tính:

data-minimum-results-for-search="Infinity"

Đánh dấu

<select class="select2" data-minimum-results-for-search="Infinity"></select>

Thí dụ

$(document).ready(function() {
  $(".select2").select2();
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>

<label>without search box</label>
<select class="select2" data-width="100%" data-minimum-results-for-search="Infinity">
  <option>one</option>
  <option>two</option>
</select>

<label>with search box</label>
<select class="select2" data-width="100%">
  <option>one</option>
  <option>two</option>
</select>


20

Loại bỏ các đầu vào với jQuery hoạt động với tôi:

$(".select2-search, .select2-focusser").remove();

Hoàn hảo, trên điện thoại di động bàn phím không được hiển thị!
Pieter Meiresone

Điều này hoạt động cho tất cả các danh sách thả xuống trên trang, nhưng tôi không thể chỉ nhắm mục tiêu thả xuống cụ thể. Không thể được nhắm mục tiêu vì chúng không phải là con của id select2.
Shaun Lebron

2
thêm một trình bao bọc để chỉ định
YAMM

3

Đây là giải pháp tốt nhất, sạch sẽ và hoạt động tốt:

$("#select2Id").select2 () ;
$("#select2Id").select2 ('container').find ('.select2-search').addClass ('hidden') ;

Sau đó, tạo một lớp .hidden { display;none; }


Điều này có thể đã hoạt động tốt trong quá khứ, nhưng không hoạt động trên phiên bản mới nhất của select2.
Matt Browne

3

Nếu bạn muốn ẩn tìm kiếm cho một thả xuống cụ thể, hãy sử dụng thuộc tính id cho điều đó.

$('#select_id').select2({ minimumResultsForSearch: -1 });

1

Nếu lựa chọn hiển thị kết quả, người ta phải sử dụng:

$('#yourSelect2ControlId').select2("close").parent().hide();

nó đóng hộp kết quả tìm kiếm và sau đó đặt điều khiển không mong muốn


1

Tôi thích làm điều này một cách linh hoạt tùy thuộc vào số lượng tùy chọn trong lựa chọn; để ẩn tìm kiếm cho các lựa chọn có 10 kết quả hoặc ít hơn, tôi làm:

$fewResults = $("select>option:nth-child(11)").closest("select");
$fewResults.select2();
$('select').not($fewResults).select2({ minimumResultsForSearch : -1 });

1
//Disable a search on particular selector
$(".my_selector").select2({
    placeholder: "ÁREAS(todas)",
    tags: true,
    width:'100%',
    containerCssClass: "area_disable_search_input" // I add new class 
});

//readonly prop to selector class
$(".area_disable_search_input input").prop("readonly", true);



1

Nếu bạn muốn ẩn khi mở lần đầu và bạn đang điền vào danh sách thả xuống thông qua cuộc gọi ajax, hãy thêm phần sau vào khối ajax trong khai báo select2 của bạn:

beforeSend: function () 
  {
    $('.select2-search--dropdown').addClass('hidden');
  }

Để sau đó hiển thị lại (và tập trung) sau khi yêu cầu ajax của bạn thành công:

  success: function() {
      $('.select2-search--dropdown').removeClass('select2-search--hide'); // show search bar then focus
      $('.select2-search__field')[0].focus();
  }

1

Bạn có thể thử cái này

$('#select_id').select2({ minimumResultsForSearch: -1 });

nó đóng hộp kết quả tìm kiếm và sau đó đặt điều khiển không mong muốn

Bạn có thể kiểm tra ở đây trong tài liệu select2 tài liệu select2


0

Câu trả lời của @Misha Kobrin rất tốt cho tôi Vì vậy tôi đã quyết định giải thích thêm

Bạn muốn ẩn hộp tìm kiếm, bạn có thể thực hiện bằng jQuery.

ví dụ: bạn đã khởi tạo plugin select2 khi thả xuống có đối tượng id

element_select = '#audience';// id or class
$(element_select).select2("close").parent().hide();

Ví dụ này hoạt động trên tất cả các thiết bị mà select2 hoạt động.


0

Tôi đã chỉnh sửa select2.min.jstệp để đặt trường select-2__searchđầu vào được tạo readonly="true".


0

Đối với đa lựa chọn, bạn phải viết mã js, không có thuộc tính cài đặt.

$('#js-example-basic-hide-search-multi').select2();

$('#js-example-basic-hide-search-multi').on('select2:opening select2:closing', function( event ) {
    var $searchfield = $(this).parent().find('.select2-search__field');
    $searchfield.prop('disabled', true);
});

Điều này được đề cập trên trang của họ: https://select2.org/searching#multi-select


0

thử CSS này

input[aria-controls=select2-product-type-results]{
  display: none;
}

đầu vào này là trường tìm kiếm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.