Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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
Html 当许多选项被隐藏时,选择元素下拉列表中的Chrome错误_Html_Google Chrome_Browser_Webkit - Fatal编程技术网

Html 当许多选项被隐藏时,选择元素下拉列表中的Chrome错误

Html 当许多选项被隐藏时,选择元素下拉列表中的Chrome错误,html,google-chrome,browser,webkit,Html,Google Chrome,Browser,Webkit,我正在寻找解决Chrome中渲染错误的方法。当一个select元素有大约90%以上的隐藏选项元素时,它就会显示出来。在Chrome中,下拉高度变得太短,无法使用。这似乎不会发生在其他浏览器上 已测试的浏览器: Chrome 27和28失败 Firefox21通行证 IE 9通行证 歌剧院12关 Safari 5.1通行证 更新:我读了一些关于这个主题的文章,很明显选项不应该隐藏在select中。您可以禁用选项,但它们不会消失。如果您根本不想在select中包含一个选项,那么应该完全删除该节点

我正在寻找解决Chrome中渲染错误的方法。当一个select元素有大约90%以上的隐藏选项元素时,它就会显示出来。在Chrome中,下拉高度变得太短,无法使用。这似乎不会发生在其他浏览器上

已测试的浏览器:

Chrome 27和28失败 Firefox21通行证 IE 9通行证 歌剧院12关 Safari 5.1通行证


更新:我读了一些关于这个主题的文章,很明显选项不应该隐藏在select中。您可以禁用选项,但它们不会消失。如果您根本不想在select中包含一个选项,那么应该完全删除该节点。隐藏选项的功能似乎不能完全跨浏览器工作,在大多数情况下,您可以继续使用箭头键选择隐藏的选项。我需要打开和关闭选项,这会给我的特殊情况带来不便,但这似乎是迄今为止唯一有效的方法。

添加此选项可能会被视为一种解决方法:

 $(document).ready(function () {

    $('#ph2').mouseenter(function () {

      var html = '';

        $(this).find('option').each(function () {

            if ($(this).css('display') !== 'none') {

                html = html + '<option>' + $(this).text() + '</option>';   
            }
        });

        $(this).html(html);
    })
});

这是我的答案;我使用jquery只是为了简单。在这种情况下,我只是在mouseenter上重做HTML。这并不理想,但可以让你走得更远。另外,请注意,在HTML中将ph2设置为div;我认为您应该从一开始就将其设置为select元素,在小提琴上可以看到我对html所做的更改。但是总的来说,在bug被修复之前,我认为类似这样的东西将尽可能地让您有一个工作选项。

最好的修复方法是在最后一个选项的末尾添加

在您的Select元素中。添加此代码:

这将添加一个空白组元素,目前是解决这一罕见错误的最好方法


谢谢

我发现隐藏/可见选项的顺序不同。这就像chrome在第一个隐藏选项处停止计算下拉列表的高度。一种方法是将显示的选项移动到“选择”对话框的顶部。如果您使用的是jquery之类的东西

var select = "select#MySelect";
$(select).children("option").hide();  //hide all options
$(select).children("Selector for items to show").each(function(idx, elm) {
           $(elm).parent().prepend(elm);  //move item to the top of parent
});
$(select).children("Selector for items to show").show(); //show selected options

作为此错误的解决方法,我可以提出以下解决方案:

要隐藏选项,请将其“转换”为其他标记并使用.hide隐藏。 要显示选项,请将其“转换”回选项并使用.show显示。 对于“转换”,我们需要如下内容:

例如:

// some `replaceTagName` implementation here

// hiding options
$('.option-selector').replaceTagName('span').hide();

// showing options
$('.option-selector').replaceTagName('option').show();

有点重,但工作正常:

我在Chrome 40上遇到了同样的问题,发现下面的解决方法对我很有效

var originalOptions = [];

$(document).ready(function(){
    originalOptions = $("yourSelect").children("option");

    $("someElement").someEvent(function(){
        $("yourSelect").children("option").remove();
        $(originalOptions).each(function(){
            if(/*criteria here*/){$("yourSelect").append($(this));}
        });
    });
});

我遇到了这个问题,我就是这么做的:

var originalSelect = $("#the_select").clone();

function hideSomeOptions(){
  $('#the_select .hide_me').remove();
}

function restoreAllOptions(){
  $("#the_select").replaceWith(originalSelect[0]);
}

目标选择输入的ID为_select,需要切换的选项或选项组的ID为hide _me类。

您发现了一个很好的错误@谢谢你。我已经向谷歌报告过了,但同时我还需要找到一个解决办法。Mac上的Chrome 28显示的都是相同的,它显示了所有隐藏的项目。看起来这个Chrome bug已经修复了!我想这个bug又出现在Chrome78上了,我已经向谷歌提交了一份报告,这是一个JS版本的新bug,需要超过100+1才能修复。我需要能够切换选项,这样的修复不会让事情变得那么容易。实际上,这似乎不是一个bug,而是更多未定义的功能。我更新了我的答案以包含这些信息。那么也许你可以将选项存储在键值对象中。在这个对象中,您将跟踪切换的可见内容,然后在单击或鼠标输入时使用该对象重做HTML。看看我在这里的另一个答案:对于对象模式。这对我来说是第一次,但因为我也在更改页面上单独隐藏的值,“html”不会存储将来可能选择的任何项目,你知道我该如何解决这个问题吗?好吧,然后将每个选项的状态存储在一个单独的对象中,并使用该对象确定在重新生成元素时在HTML中包含哪些选项。可以使用key:value,其中key是选项,value存储选项是否可见。请参阅我上面的评论中的答案。此解决方案无法解决您仍然可以使用键盘选择隐藏选项的问题。无论如何,很容易修复:将.prop{disabled:true}添加到第二行。
var originalSelect = $("#the_select").clone();

function hideSomeOptions(){
  $('#the_select .hide_me').remove();
}

function restoreAllOptions(){
  $("#the_select").replaceWith(originalSelect[0]);
}