select2 - ซ่อนกล่องค้นหา


206

สำหรับการเลือกที่สำคัญยิ่งกว่าของฉันช่องค้นหาใน Select2 นั้นยอดเยี่ยม อย่างไรก็ตามในหนึ่งตัวอย่างฉันมีตัวเลือกแบบง่าย ๆ ในการกำหนดค่าตายตัว 4 ตัวเลือก ในกรณีนี้ช่องการค้นหาไม่จำเป็นและดูโง่เล็กน้อย เป็นไปได้หรือไม่ที่จะซ่อนมันไว้? ฉันดูเอกสารออนไลน์และไม่พบตัวเลือกใด ๆ สำหรับสิ่งนี้ในตัวสร้าง

แน่นอนว่าฉันสามารถใช้ html select ปกติได้ แต่สำหรับความสอดคล้องฉันต้องการใช้ Select2 ถ้าเป็นไปได้


ขอบคุณสำหรับความคิด. แม้ว่าฉันจะรู้เกี่ยวกับ. แสดง () และ. ซ่อน () ใน jQuery มันไม่ได้เกิดขึ้นกับฉันว่าปลั๊กอินจะยังคงทำงานต่อไปหากฉันทำบางสิ่งเช่นนั้นนอกเหนือจากตัวเลือกของตัวเอง อย่างไรก็ตามได้อย่างรวดเร็วก่อนดูเหมือนว่าจะทำงาน :)
EleventyOne

คุณสามารถอธิบายได้ว่าวิธีการซ่อนทำงานอย่างไรและทำงานอย่างไร? คุณจะบอกฉันมันเท่านั้นซ่อนช่องค้นหาเพราะที่ดูเหมือนจะไม่เป็นกรณีที่ทุกคน
IcedDante

@IcedDante hideวิธีการอธิบายที่นี่: api.jquery.com/hideตราบใดที่คุณใช้มันกับตัวเลือกที่เหมาะสมเท่านั้นใช่มันควรซ่อนกล่องค้นหาเพียงอย่างเดียว อย่างไรก็ตามมีวิธีการเฉพาะปลั๊กอินที่สามารถใช้ในการซ่อนซึ่งฉันอยากจะแนะนำให้คุณใช้แทน (ดูด้านล่าง)
EleventyOne

คำตอบ:


474

ดูที่กระทู้นี้https://github.com/ivaynberg/select2/issues/489คุณสามารถซ่อนกล่องค้นหาโดยการตั้งค่าขั้นต่ำResultsForSearchให้เป็นค่าลบ

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

14
ปัญหาหลักที่นี่ตามที่กล่าวถึงในตั๋วบน GitHub อยู่บนมือถือมันยังคงแสดงแป้นพิมพ์ เราได้แทนที่ select2 ด้วยการเลือก
toutpt

2
และแปลได้อย่างสมบูรณ์เป็น angular-ui ui-select2!
rhigdon

ตัวเลือกที่มีประโยชน์มาก! ฉันใช้มันเพื่อแสดงการค้นหา 10 ตัวเลือกและอื่น ๆ ไม่จำเป็นต้องป้อนข้อมูลการค้นหาเอาเอง
blazkovicz

@KevinBrown Infinityไม่ใช่ค่าลบ การแก้ไขของคุณทำให้ข้อความและรหัสไม่ตรงกัน ปัญหาที่เชื่อมโยงกับชี้ให้เห็นว่าค่าลบเป็นแนวทางที่ถูกต้อง ปัญหาที่เชื่อมโยงกับการอ้างสิทธิ์ "ค่าสูงขั้นต่ำResultsForSearchจะซ่อนเฉพาะช่องค้นหาใน open select เท่านั้น แต่ถ้าเราพิมพ์ตัวอักษรบางส่วนขณะที่ select ถูกปิดและมุ่งเน้น - การค้นหาจะปรากฏขึ้นไม่ว่าจะสูงเท่าใด" และถึงแม้ว่า ในเวอร์ชั่นปัจจุบันมีแนวโน้มว่าจะเป็นปัญหาที่แท้จริงในเวอร์ชั่นที่เก่ากว่า ด้วยเหตุผลเหล่านี้ฉันจึงย้อนกลับการแก้ไขของคุณ

1
แต่มันปิดการใช้งานฟังก์ชั่นการค้นหาอย่างสมบูรณ์
sudip


34
.no-search .select2-search {
    display: none
}

$ ( "# ทดสอบ"). Select2 ({
    dropdownCssClass: 'ไม่ค้นหา'
}); 

1
+1 ฉันชอบสิ่งนี้เนื่องจากจะป้องกันไม่ให้ช่องค้นหาปรากฏใน UI สั้น ๆ ในขณะที่มีการร้องขอ AJAX นี่ก็เป็นความจริงสำหรับแฮ็ค -1
SimonGates

นี่เป็นคำตอบที่ดีที่สุดสำหรับคำถามอย่างแน่นอนเพราะมันจะป้องกัน UI ของเหตุการณ์เช่น "ค้นหา .... "
สารินสุริยกูล

5
ทำงานได้อย่างสมบูรณ์ขอขอบคุณ! เพียงทราบถึง Googler ใด ๆ ในอนาคตนี้ต้องใช้รุ่นเต็ม select2 (select2.full. *) ตามที่ระบุไว้ที่นี่: github.com/select2/select2/issues/2879#issuecomment-149940634
Othyn

1
ขอบคุณมันเป็นสิ่งที่ฉันกำลังมองหาตั้งแต่แม้จะมีกล่องค้นหาซ่อนอยู่มันช่วยให้ฟังก์ชันการค้นหาสามารถใช้ได้เมื่อคุณต้องการเรียกใช้โดยทางโปรแกรม: $ ("# myselect") select2 ("ค้นหา", "search_value")
nicolas

แน่นอนนี่เป็นตัวเลือกที่ดีที่สุด @Othyn บอกว่าต้องใช้เวอร์ชันเต็ม select2.full.min.js ตามที่ระบุไว้ในเว็บไซต์: select2.github.io
robbpriestley

26

เวอร์ชัน 4.0.3

พยายามอย่าผสมข้อกำหนดส่วนติดต่อผู้ใช้กับรหัส JavaScript ของคุณ

คุณสามารถซ่อนกล่องค้นหาในมาร์กอัปด้วยแอททริบิวต์:

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

มาร์กอัป

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

ตัวอย่าง

$(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

การลบอินพุตด้วย jQuery ใช้งานได้สำหรับฉัน:

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

สมบูรณ์แบบบนมือถือคีย์บอร์ดไม่ปรากฏ!
Pieter Meiresone

สิ่งนี้ใช้ได้กับดรอปดาวน์ทั้งหมดในหน้า แต่ฉันไม่สามารถกำหนดเป้าหมายเฉพาะดรอปดาวน์ได้เท่านั้น ไม่สามารถกำหนดเป้าหมายได้เนื่องจากไม่ใช่ลูกของรหัส select2
Shaun Lebron

2
เพิ่ม wrapper เพื่อระบุ
YAMM

3

นี่คือทางออกที่ดีที่สุดสะอาดและทำงานได้ดี:

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

จากนั้นสร้างชั้นเรียน .hidden { display;none; }


สิ่งนี้อาจใช้งานได้ดีในอดีต แต่ไม่สามารถใช้งานกับ select2 เวอร์ชันล่าสุด
Matt Browne

3

หากคุณต้องการซ่อนการค้นหาแบบหล่นลงที่เฉพาะเจาะจงใช้แอตทริบิวต์ id สำหรับสิ่งนั้น

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

1

หากการเลือกแสดงผลลัพธ์หนึ่งต้องใช้สิ่งนี้:

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

มันจะปิดกล่องผลลัพธ์การค้นหาและจากนั้นตั้งค่าการควบคุมที่มองไม่เห็น


1

ฉันชอบที่จะทำสิ่งนี้แบบไดนามิกขึ้นอยู่กับจำนวนของตัวเลือกในการเลือก; ในการซ่อนการค้นหาเพื่อเลือกด้วยผลลัพธ์ 10 รายการหรือน้อยกว่า

$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

หากคุณมีคุณสมบัติหลายอย่างในการเลือกของคุณแฮ็คที่สกปรกนี้จะทำงาน:

var multipleSelect = $('select[name="list_type"]');
multipleSelect.select2();
multipleSelect.parent().find('.select2-search--inline').remove();
multipleSelect.on('change', function(){
    multipleSelect.parent().find('.select2-search--inline').remove();
});

ดูเอกสารได้ที่นี่https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets


1

หากคุณต้องการซ่อนในการเปิดครั้งแรกและคุณเติมข้อมูลแบบเลื่อนลงผ่านการโทร ajax ให้เพิ่มรายการต่อไปนี้ในบล็อก ajax ในการประกาศ select2 ของคุณ:

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

หากต้องการแสดงอีกครั้ง (และโฟกัส) หลังจากคำขอ ajax ของคุณสำเร็จ:

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

1

คุณสามารถลองสิ่งนี้

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

มันจะปิดกล่องผลลัพธ์การค้นหาและจากนั้นตั้งค่าการควบคุมที่มองไม่เห็น

คุณสามารถตรวจสอบที่นี่ในเอกสารselect2 select2 เอกสาร


0

@Misha Kobrin ทำงานได้ดีสำหรับฉันดังนั้นฉันจึงตัดสินใจอธิบายเพิ่มเติม

คุณต้องการซ่อนกล่องค้นหาคุณสามารถทำได้โดย jQuery

ตัวอย่างเช่นคุณได้เริ่มต้นปลั๊กอิน select2 ในรายการแบบหล่นลงมีผู้ชม id

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

ตัวอย่างทำงานบนอุปกรณ์ทั้งหมดที่ select2 ทำงาน


0

ผมแก้ไขselect2.min.jsไฟล์เพื่อตั้งช่องใส่ที่สร้างขึ้นเพื่อselect-2__searchreadonly="true"


0

สำหรับการเลือกหลายตัวคุณต้องเขียนรหัส js ไม่มีคุณสมบัติการตั้งค่า

$('#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);
});

สิ่งนี้กล่าวถึงในหน้าของพวกเขา: https://select2.org/searching#multi-select


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.