Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 隐藏选择选项不反射_Javascript_Jquery_Html - Fatal编程技术网

Javascript 隐藏选择选项不反射

Javascript 隐藏选择选项不反射,javascript,jquery,html,Javascript,Jquery,Html,我正试图对select隐藏一些选项。使用的解决方案如下: this.selectBox.children(".myOption_"+optionValue).wrap("<span></span>"); this.selectBox.children(“.myOption_quot+optionValue”).wrap(“”); this.selectBox是上述select的jQuery对象 在Firefox中,它工作得很好,但在IE8中,这些变化并没有反映出来:

我正试图对select隐藏一些选项。使用的解决方案如下:

 this.selectBox.children(".myOption_"+optionValue).wrap("<span></span>");
this.selectBox.children(“.myOption_quot+optionValue”).wrap(“”);
this.selectBox是上述select的jQuery对象

在Firefox中,它工作得很好,但在IE8中,这些变化并没有反映出来:如果你看一下select,它看起来会保持不变。但是,如果用户选择一个选项,则该值将考虑删除的元素

以下是一个例子:

<option value="val1">Test1</option>
<option value="val2">Test2</option>
<option value="val3">Test3</option>
<option value="val4">Test4</option>
Test1
测试2
测试3
测试4
现在,当我选择“Test1”时,将调用一个函数并执行上面的代码。 从用户的角度来看,选项将保持不变。但是如果他现在再次尝试选择“Test1”,那么提供的值实际上将是“val2”,并且应该删除该选项。同样,什么也没有发生,所以他再次选择“Test1”,值将是“val3”,依此类推

为了显示发生的更改,我必须先隐藏,然后显示select

this.selectBox.children(".myOption_"+optionValue).wrap("<span></span>");
this.selectBox.hide().show();
this.selectBox.children(“.myOption_quot+optionValue”).wrap(“”);
this.selectBox.hide().show();
上面的代码将使更改可见(隐藏单击的选项)

更奇怪的是,这把小提琴:

在同一浏览器上正常工作

我不明白为什么这一切会突然发生


为什么会这样?我应该在哪里查找该问题?

我不确定您为什么要隐藏该选项,而不是删除它,但下面是一个如何执行的示例。它是基于隐藏选项的

在这里拉小提琴->

这里的JSBin(应该在IE8中工作)->

var$select=$('select');
$select.prop('selectedIndex',-1)//确保我们可以隐藏第一个选项
$select.change(函数(){
//不确定如果要隐藏,为什么不想删除该选项而不是通过T隐藏它。。。
$select.children('option:selected').wrap('');
//移除它
//$select.children('option:selected').remove();
this.selectedIndex=-1;//确保可以隐藏最后一个选项
});

是否在ajax调用的success:part中执行此操作?
此。selectBox.children(“.myOption\uU”+optionValue”).hide()
如果您只想使用类“myOption\uU”+optionValue()
隐藏某些选项,请删除()remove@MikeC. 不,它位于“更改”事件的处理程序中。处理程序附带有jQuery(“…”)。在(…)上。如果你看这个提琴,你会注意到它不仅仅是一个span-wrap,你还对样式显示进行了更改:没有人将你的代码放在提琴中,以便人们能够看到代码的错误。@joelharkes“.hide()”函数不适用于IE8中的“option”元素。这里是我得到解决方案的地方:我将它隐藏起来,以便以后能够在相同的位置显示它。我无法在IE8上运行您的代码(JSFIDLE页面没有正确显示),但解决方案似乎与我的一样。我开始认为问题的根源可能在其他地方。你有什么建议吗?@Dragos我重新编写了JSBin的示例,并尝试从IE10以IE8兼容模式运行它。它似乎工作得很好。。。它对你也有用吗?
var $select = $('select');

$select.prop('selectedIndex', -1); //ensure we can hide the first option

$select.change(function () {
    //not sure why you would not want to remove the option instead of hiding it byt, if you want to hide... 
    $select.children('option:selected').wrap('<span class="hide-option"></span>');

    //remove it
    //$select.children('option:selected').remove();

    this.selectedIndex = -1; //ensure we can hide the last option
});