[英]jQuery load does not work on IE 9 ( works fine on FF, Chrome and Safari)
[英]jQuery filtering select options does not work in Safari (but works in Chrome and FF)
我有一個帶有一些下拉列表的表單,第一個選擇的下拉列表將用於過濾第二個下拉列表的選擇(以限制它們)。 以下代碼在 FF 和 Chrome 中運行良好,但在 Safari 中不起作用(至少版本 11.1.2):
if(~jQuery(this).attr('id').indexOf('5b0ad35592224') && ~jQuery(this).attr('id').indexOf(jQuery(this).closest('tr').attr('data-id'))) {
var vallie = jQuery(this).val();
var sub = jQuery('[id*="'+jQuery(this).closest('tr').attr('data-id')+'-field_5b0ad39f92225"]');
console.log(sub);
jQuery('option', sub).filter(function(){
if (~jQuery(this).val().indexOf(vallie) || jQuery(this).val() === 'Choisir') {
jQuery(this).show();
} else {
jQuery(this).hide();
}
});
jQuery(sub).val('Choisir');
};
奇怪的是,當我控制台記錄為vallie
或sub
或jQuery(this).val().indexOf(vallie)
它們在所有瀏覽器中都是相同的。 我很困惑為什么 Safari 不過濾第二個下拉列表中的選項(它只顯示所有選項)
如果你打算使用.filter
,你應該返回一個布爾值,指示是否包含當前項目而不是使用.show()
和.show()
.hide()
文檔
否則,使用.each
或.map
感謝@charlietfl 提醒我隱藏選項並非普遍支持的事實。 這是我最終采用的解決方案:
這是實際的代碼:
if(~jQuery(this).attr('id').indexOf('5b0ad35592224') && ~jQuery(this).attr('id').indexOf(jQuery(this).closest('tr').attr('data-id'))) {
var vallie = jQuery(this).val();
var thismenu = menu_portes; // set default menu object
if (vallie === 'Tiroir') {thismenu = menu_tiroirs } else if (vallie === 'Côté') {thismenu = menu_cotes }
var $sub = jQuery('[id*="'+jQuery(this).closest('tr').attr('data-id')+'-field_5b0ad39f92225"]');
$sub.empty(); // remove old options
$sub.append(jQuery('<option>', { value: 'Choisir', text: 'Choisir'})); // add Choisir at top
jQuery.each(thismenu, function(key,value) { // loop through my object options
$sub.append(jQuery("<option></option>").attr("value", key).text(value)); //append options from my menu object
});
jQuery($sub).val('Choisir'); // set menu to Choisir
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.