Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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的行为非常怪异;选择";要素_Javascript_Jquery_Google Chrome_Webkit_Sizzle - Fatal编程技术网

Javascript 在开放(聚焦)环境中,Chrome的行为非常怪异;选择";要素

Javascript 在开放(聚焦)环境中,Chrome的行为非常怪异;选择";要素,javascript,jquery,google-chrome,webkit,sizzle,Javascript,Jquery,Google Chrome,Webkit,Sizzle,这里有一个元素: <select> <option>Hello</option> <option>Banana</option> <option>Balloon</option> <option>Something</option> <option>Potato</option> <option>Cleve

这里有一个
元素:

<select>
    <option>Hello</option>
    <option>Banana</option>
    <option>Balloon</option>
    <option>Something</option>
    <option>Potato</option>
    <option>Cleveland</option>
</select>

处理程序设置一个间隔计时器,每隔200毫秒查找当前选定的
,并且不执行任何操作。当我在Chrome(13.0.782.112)中运行小提琴时,我单击
元素,然后尝试选择一个条目,选择突出显示会一直跳回到第一个选择的元素。当然,我可以单击显示的任何
元素,这些元素都可以正常工作,然后下次它会做同样的事情

现在,如果我更改计时器处理程序,使其不使用jQuery查找当前选定的
元素,如下所示:

$(function() {

    function foo() {
        var select = $('select')[0];
        var s = $(select.options[select.selectedIndex]);
    }

    setInterval(foo, 200);
});
那我就看不到效果了

Firefox不会这样做。我还没试过旅行

就我个人而言,我认为这里有什么地方做错了。是铬的吗?jQuery

编辑-还有一个细节-我在Linux上运行Chrome。我马上试试Windows。(在Windows中编辑相同。)

将代码更改为:

function foo() {
    var s = $('select option:selected');
}

setInterval(foo, 200);
不确定它为什么会这样做,但我猜这与伪选择器在jQuery中的工作方式有关。它们被实现为与选择器名称配对的函数(在本例中为“selected”)。因此,它们针对上下文中的每一个可能元素(而不仅仅是那些可能被选择的元素)运行


可能存在某种奇怪的ghost元素,“selected”伪选择器在不应该执行的情况下对其执行。这里的解决方案是,在执行伪选择器之前,我将上下文限制为选项。总是一件好事。

Windows 7上的Chrome+Safari都以相同的方式损坏。@thirtydot--谢谢!我在tagsI中添加了“webkit”也可以复制这个问题(Chrome 13/Win7),但我想问一下,为什么您不能只使用
$('select')。change()
在回调中捕获更改事件,而不是使用间隔?另外,我喜欢您的随机
值:“有人知道新知识吗?”吉米·索祖克(Jimmy Sawczuk)——我显然可以在这里做到这一点,而且在我的真实情况下也可能做到。问题是,我在“观察”整个表单的变化。我可以绑定所有元素的“更改”,但我试图通过简单的轮询来避免IE存在的一些愚蠢的“更改”错误。通常,这不会引起任何问题。这对我来说很有效,很好!()是的,这绝对让这种怪诞停止了。我仍然很好奇,看看是否有天才能准确地知道交易是什么:-)这确实有效,但是
$('select')。find('option:selected')
仍然中断并且(blablabla newline)
$('select:selected')
有效。我想说的是,它似乎与在选择器中添加
选项
无关
.find()
似乎是问题所在。
function foo() {
    var s = $('select option:selected');
}

setInterval(foo, 200);