ฉันใช้วิธีแก้ปัญหาโดยใช้ฟังก์ชันที่กรอง combobox ( <select>
) ตามแอตทริบิวต์ข้อมูลที่กำหนดเอง โซลูชันนี้รองรับ:
- มีการ
<option>
แสดงเวลาที่ตัวกรองจะปล่อยให้สิ่งที่เลือกว่างไว้
- เคารพแอตทริบิวต์ที่เลือกที่มีอยู่
<option>
องค์ประกอบที่ไม่มีแอตทริบิวต์ตัวกรองข้อมูลจะไม่ถูกแตะต้อง
ทดสอบกับ jQuery 2.1.4 และ Firefox, Chrome, Safari และ IE 10+
นี่คือตัวอย่าง HTML:
<select id="myCombobox">
<option data-filter="1" value="AAA">Option 1</option>
<option data-filter="1" value="BBB">Option 2</option>
<option data-filter="2" value="CCC">Option 3</option>
<option data-filter="2" value="DDD">Option 4</option>
<option data-filter="3" value="EEE">Option 5</option>
<option data-filter="3" value="FFF">Option 6</option>
<option data-filter-emptyvalue disabled>No Options</option>
</select>
รหัส jQuery สำหรับการกรอง:
function filterCombobox(selectObject, filterValue, autoSelect) {
var fullData = selectObject.data("filterdata-values");
var emptyValue = selectObject.data("filterdata-emptyvalue");
if (!fullData) {
fullData = selectObject.find("option[data-filter]").detach();
selectObject.data("filterdata-values", fullData);
emptyValue = selectObject.find("option[data-filter-emptyvalue]").detach();
selectObject.data("filterdata-emptyvalue", emptyValue);
selectObject.addClass("filtered");
}
else {
selectObject.find("option[data-filter]").remove();
selectObject.find("option[data-filter-emptyvalue]").remove();
}
var toEnable = fullData.filter("option[data-filter][data-filter='" + filterValue + "']");
selectObject.append(toEnable);
if (toEnable.length == 0) {
selectObject.append(emptyValue);
}
if (autoSelect) {
var obj = selectObject.find("option[selected]");
selectObject.val(obj.length == 0 ? toEnable.val() : obj.val());
}
}
ในการใช้งานคุณเพียงแค่เรียกใช้ฟังก์ชันด้วยค่าที่คุณต้องการเก็บไว้
filterCombobox($("#myCombobox"), 2, true);
จากนั้นเลือกผลลัพธ์จะเป็น:
<select id="myCombobox">
<option data-filter="2" value="CCC">Option 3</option>
<option data-filter="2" value="DDD">Option 4</option>
</select>
องค์ประกอบดั้งเดิมถูกเก็บไว้โดยฟังก์ชัน data () ดังนั้นการเรียกที่ตามมาจะเพิ่มและลบองค์ประกอบที่ถูกต้อง