Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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 在Chrome中的multi-select列表上,jQuery设置道具(“selected”,true)只工作一次_Javascript_Jquery_Google Chrome_Scroll_Multi Select - Fatal编程技术网

Javascript 在Chrome中的multi-select列表上,jQuery设置道具(“selected”,true)只工作一次

Javascript 在Chrome中的multi-select列表上,jQuery设置道具(“selected”,true)只工作一次,javascript,jquery,google-chrome,scroll,multi-select,Javascript,Jquery,Google Chrome,Scroll,Multi Select,当试图将“选择列表”选项设置为“已选定”以将“选择列表”滚动到该选项时,该选项在除Chrome之外的所有浏览器中都有效。在Chrome中,它只工作一次,但连续的时间在Chrome中不起作用。如何确保在选择列表中设置选项的选定属性会将该选项滚动到视图中 这是我的问题的一个例子- 我用于在列表中选择一个选项以滚动查看的代码如下: (function ($) { $.fn.scrollToOption = function (option) { var _option = $(

当试图将“选择列表”选项设置为“已选定”以将“选择列表”滚动到该选项时,该选项在除Chrome之外的所有浏览器中都有效。在Chrome中,它只工作一次,但连续的时间在Chrome中不起作用。如何确保在选择列表中设置选项的选定属性会将该选项滚动到视图中

这是我的问题的一个例子-

我用于在列表中选择一个选项以滚动查看的代码如下:

(function ($) {
    $.fn.scrollToOption = function (option) {
        var _option = $(option, this);
        // if option is in list
        if(_option) {
            // store the selection state
            var isSelected = _option.is(":selected");

            _option.prop("selected", true); // scroll to the option
            _option.prop("selected", isSelected);  // restore the selection state
        }
        return this;
    };
})(jQuery); 
编辑:我也尝试过jQuery插件,但在Chrome中效果不太好。以下是一个例子-


编辑:这里有一个更清晰的例子,说明我正在尝试做什么。从选择列表中选择两个选项,并将列表滚动到最后选择的选项。除了Chrome和Safari之外,这在所有浏览器中都有效。在Chrome中,第一个选择滚动到选项,但第二个$'select option[value=].prop'selected',true;不滚动列表-

如果您的目标只是滚动到下拉列表中的某个值,则只需使用val:

这在任何浏览器中都适用


如果您试图根据下拉列表中的值滚动到页面上的某个元素,则必须提供一个示例,使我们更接近您想要的内容,以便我们能够解决该特定场景。

浏览器行为与选择多个选项时滚动到视图中的选项不一致。但是,使用其selected属性选择该选项,再加上设置元素的selectedIndex属性,似乎可以确保在所有主要浏览器中都将select滚动到正确的位置。使用此选项,您可以获得正确的垂直滚动,选择所需的选项,然后手动滚动选择

Opera似乎不完全支持scrollTop for select元素,因此此解决方案在Opera中不起作用

演示:

代码:


我开始认为这是Chrome的一个bug——您的JSFIDLE不包含ID测试的HTML元素,并且您不清楚您希望它做什么。您是要按建议滚动到页面上的某个元素,还是要滚动到下拉列表中的某个选项值?它实际上包含一个ID为test的元素,5111是的,我的目标是滚动到下拉列表中的某个值。您的解决方案可以工作,但它会取消选择所有其他选项。我怎样才能保持所有之前选择的选项处于选中状态?我可以像这样保存状态,但即使最后一行代码也不会在Chrome中滚动列表-在IE9、Firefox 15、Opera 12中进行了测试。那些将列表滚动到最后选定的值,但Chrome 22和Safari 5不会将列表滚动到最后选定的值。是的,你说得对,我不明白你想保留选定的值,只是附加一个新值@不过,蒂姆当似乎已经找到了答案!:这是我想要的,谢谢。因此,关键是取消全部选择并设置selectedIndex。设置selectedIndex实际上会自动取消所有选择,因此您可以删除$selectedOptions.propselected,false;线我将更新。为什么此解决方案不适用于我?如果我选择一个值,我可以控制台记录正确的值,但我在浏览器中看到第一个元素…@TakácsZsolt:哪个浏览器?任何borwser。。。我们可以用另一种解决方案来解决这个问题:
$('#selectList').val(51);
function selectAndScrollToOption(select, option) {
    $select = $(select);

    // Store the currently selected options
    var $selectedOptions = $select.find("option:selected");

    // Select the new option using its selected property and selectedIndex.
    // This seems to make the select scroll to the desired place in all major
    // browsers
    option.selected = true; // Required for old IE
    select.selectedIndex = option.index;

    // Measure the vertical scrolling
    var scrollTop = $select.scrollTop();

    // Re-select the original options
    $selectedOptions.prop("selected", true);

    // Scroll to the correct place
    $select.scrollTop(scrollTop);
}