I have a form with some dropdowns, and the first selected dropdown will serve to filter the second dropdown's choices (to limit them). The following code works just fine in FF and Chrome but will not work in Safari (version 11.1.2 at least):
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');
};
The odd thing is when I console log the values returned for vallie
or sub
or jQuery(this).val().indexOf(vallie)
they are the same in all browsers. I am stumped as to why Safari does not filter the options in the second dropdown (it just shows all the options)
Thanks to @charlietfl for alerting me to the fact that hiding options is not universally supported. Here is the solution I ended up going with:
Here is the actual code:
If you are going to use
.filter
, you should be return a boolean indicating whether or not to include the current item instead of using.show()
and.hide()
documentationOtherwise, use
.each
or.map