【问题标题】:Safari jquery select option .hide() alternativeSafari jquery 选择选项 .hide() 替代
【发布时间】:2022-01-11 12:49:58
【问题描述】:

我有一个 jquery 脚本,它首先隐藏所有选择选项:

$('option[data-start="1"]').hide();

然后根据用户选择的其他输入显示选项。

$('option[data-variable1="' + variable1x + '"][data-variable2="' + variable2x + '"]').show();

一切都很好,但在 Safari 上 .hide() 不起作用。 我知道解决方法:

$('option[data-start="1"]').prop('disabled', true);
$('option[data-variable1="' + variable1x + '"][data-variable2="' + variable2x + '"]').prop('disabled', false);

但这只会关闭一些选项。我有几十个选项,所以有一长串不活动的选项。 我尝试隐藏非活动选项,但 Safari 可能会忽略此代码:

select option[disabled="disabled"]{display:none !important;width:0;height:0;visibility: hidden;opacity:0;}
select option:disabled { display:none !important;height:0;width:0;visibility: hidden;opacity:0;}

您能帮我解决一些 Safari 的问题吗?

【问题讨论】:

  • 我想任何对原生 <select> 的跨平台定制都将​​是一场艰苦的战斗。从任务中退后一步,看看目标,你最好的选择可能是不再使用原生的<select>,而是使用一个构建自定义类选择界面的插件。对于 jQuery,流行的选择包括 Select2 和 Chosen。

标签: javascript jquery css safari


【解决方案1】:

获得兼容隐藏和显示元素的完整浏览器 尝试使用hidden 属性 https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden

在你的代码中使用它来隐藏option

$('option[data-start="1"]').attr('hidden','hidden');

并显示option 使用

$('option[data-start="1"]').removeAttr('hidden','hidden');

这是一个工作小提琴https://jsfiddle.net/zj2kLxc8/1/

【讨论】:

  • 我在 Safari 12 上的 lambdatest.com 上对此进行了测试,但这不起作用。所有选项在开始时可见。
  • 更改具有 hidden 属性的元素的 CSS display 属性的值会覆盖该行为。例如,元素样式 display: flex 将被显示,尽管 hidden 属性存在。
  • 但您的示例 od jsfiddle 也不适用于 Safari 12。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
相关资源
最近更新 更多