1

在将此代码添加到我的页面之前,如果在执行时,我注意到我的所有选择框都需要用户单击 2 次才能打开下拉菜单,第一次单击似乎将焦点放在它上面,然后是第二次单击最后打开它。如果我删除代码,行为会发生变化,用户只需单击 1 次即可打开下拉菜单及其所有菜单选项。

我不确定要修复或修改什么,这样就不需要点击 2 次,我也在使用 ie。7 所以这将是一个围绕 css 焦点的工作。我不希望有任何 jquery。

感谢你的帮助。

function v9_form() {
//===========================================================================================>>
    var x = document.getElementsByTagName('INPUT');
    for (var i = 0; i < x.length; i++) {
            if (x[i].type == "text" && x[i].readOnly == false) {            
        if (x[i].id != "date2" && x[i].id != "date3") {

            x[i].onfocus = function() { this.style.backgroundColor = '#FFFFC4';};

            x[i].onblur = function() {  this.style.backgroundColor = '#FFFFFF';};
        }   


            }//end of if
    }//end of for

    var y = document.getElementsByTagName('SELECT');
    for (var i = 0; i < y.length; i++) {
            y[i].onfocus = function() { this.style.backgroundColor = '#FFFFC4'; };
            y[i].onblur = function() { this.style.backgroundColor = '#FFFFFF'; };
    }

    var z = document.getElementsByTagName('TEXTAREA');
    for (var i = 0; i < z.length; i++) {
            z[i].onfocus = function() { this.style.backgroundColor = '#FFFFC4'; };
            z[i].onblur = function() { this.style.backgroundColor = '#FFFFFF'; };
    }

}
4

2 回答 2

0

这是 IE 的一个已知问题。如果您更改了onfocusIE 中的任何样式,则不会显示下拉选项。

一个解决方案是使用onfocusinIE 的事件:

y[i].onfocusin = function() { this.style.backgroundColor = '#FFFFC4'; }

来自MSDN

在将焦点设置在该元素上之前为该元素触发。

另一种选择是使用:focusCSS 选择器,但您显然仅限于 CSS,没有复杂的 Javascript 逻辑。

于 2012-11-21T19:37:53.740 回答
0

你是这个错误的受害者。

看起来这是 IE 的一些特殊行为。该答案中有一些代码提供了一种可能的解决方法,您可以尝试,但它的功能非常繁重(适应使用旧版本 IE 的人)。我认为您最好的选择是使用 CSS 伪类(如上面的答案所推荐),或者只是删除那些使用 IE<8 的功能。

于 2012-11-21T19:38:03.670 回答