我正在尝试使用.hide()在下拉框中隐藏一些选项。这在firefox和chrome中运行得非常好,但它在IE和Safari中不起作用。我的原始代码更复杂,但我已将其缩小到这一点。
我尝试了几种组合,但没有任何效果。
.hide()有效,但出于某种原因不适用于选项标签内的内容。
有人可以帮帮我吗?这让我疯了。非常感谢你抽出时间帮忙!
这是我的jscript:
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".wrapper1").hide();
});
</script>
这是HTML:
<label for="prodName">Product Name:</label>
<input type="text" name="prodName" /><br />
<label for="candy">Candy:</label>
<select name="candy" id="candy">
<option value="0" class="blank" selected="selected"></option><!-- PHP and JS validators should not allow "0" here. User should be prompted to select something. -->
<option value="1" class="wrapper1">Hide this 1</option>
<option value="2" class="wrapper1">Hide this 2</option>
<option value="3" class="wrapper2">Show this 1</option>
</select><br />
答案 0 :(得分:11)
这将有效..将.show改为.showOption和.hideOption。 然而,这在IE中仍然很糟糕,因为在Firefox中你可以让它隐藏一个被选中的选项。因此,如果显示“选择一个”并被隐藏。 Firefox仍然会说“选择一个”。
$.fn.showOption = function() {
this.each(function() {
if( this.tagName == "OPTION" ) {
var opt = this;
if( $(this).parent().get(0).tagName == "SPAN" ) {
var span = $(this).parent().get(0);
$(span).replaceWith(opt);
$(span).remove();
}
opt.disabled = false;
$(opt).show();
}
});
return this;
}
$.fn.hideOption = function() {
this.each(function() {
if( this.tagName == "OPTION" ) {
var opt = this;
if( $(this).parent().get(0).tagName == "SPAN" ) {
var span = $(this).parent().get(0);
$(span).hide();
} else {
$(opt).wrap("span").hide();
}
opt.disabled = true;
}
});
return this;
}
答案 1 :(得分:8)
option
个元素。您可能需要删除它们。
虽然可能更好(或至少是替代)的可能性是禁用它们。
$(".wrapper1").prop('disbled', true);
答案 2 :(得分:5)
您必须删除option
元素。许多浏览器都不支持使用display:none
隐藏它们。
隐藏
var elems = $(".wrapper1").remove();
SHOW
$('#candy').append(elems);
答案 3 :(得分:4)
我尝试了围绕选项使用<span>
的解决方案,但发现它在所有浏览器中都不适合我。
我已经制作了一个jQuery插件,很好地解决了这个问题。有了它,你会这样做:
$('#selection1').hideOption('1');
$('#selection1').showOption('1');
您可以根据需要隐藏和显示它们,并保留原始订单和已分配给.data('x')
的所有option
值。它适用于所有浏览器。您可以在此示例中看到:jsFiddle - Toggle Dropdown Options
您可以获得Toggle Dropdown Options plug-in。如果您不喜欢插件,只需将JavaScript代码复制到您自己项目的JavaScript文件中即可。有关详细信息,请参阅插件上的Read the Docs链接!
答案 4 :(得分:1)
我找到了一个解决方法,只需用Jquery wrap()包装到你要隐藏的选项,它会自动隐藏,并用unwrap()展开span以再次显示它。
答案 5 :(得分:0)
我尝试了很多不同的方法,但这个解决方案似乎很合理,我已经在我的代码中使用了。没有插件需要使用jquery对象的简单注册函数
解决方案:
(function ($) {
$('#showOne').click(function () {
$('#ddlNumbers').showHideDropdownOptions('3', true);
});
$('#hideOne').click(function () {
$('#ddlNumbers').showHideDropdownOptions('3', false);
});
$.fn.showHideDropdownOptions = function(value, canShowOption) {
$(this).find('option[value="' + value + '"]').map(function () {
return $(this).parent('span').length === 0 ? this : null;
}).wrap('<span>').hide();
if (canShowOption)
$(this).find('option[value="' + value + '"]').unwrap().show();
else
$(this).find('option[value="' + value + '"]').hide();
}
})(jQuery);
以下是完整的实施http://jsfiddle.net/8uxD7/3/
答案 6 :(得分:0)
Safari呈现的内容有所不同,并为下拉菜单使用UI叠加层。您不仅可以隐藏它们,还可以每次从数组中刷新匹配的选项。在这里,我每次使用jQuery清除选择选项并创建新选项:
myFunction();
function myFunction() {
//alert("dins");
var select = document.getElementById("selectArticles");
var options = ["NouCreus", "Pic de l'Àliga", "Puigmal", "Finestrelles", "NouFonts", "Núria Estació"];
var i, L = select.options.length - 1;
for(i = L; i >= 0; i--) {
select.remove(i);
}
var input, filter, ul, li, a, i, txtValue;
input = document.getElementById("inputPatro");
filter = input.value.toUpperCase();
var el = document.createElement("option");
el.textContent = "Vall de Núria";
el.value = "-1";
select.appendChild(el);
for(var i = 0; i < options.length; i++) {
var opt = options[i];
if (opt.toUpperCase().indexOf(filter) > -1) {
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
}
}
<input type="text" id="inputPatro" onchange="myFunction()" placeholder="Filtre per nom.." title="Escriu un patró per filtrar les opcionw del desplegable">
<select id="selectArticles">
</select>