1

我有两个 div,一个叫做“mainDesign”,一个叫做“div1”。

单击“div1”时,将调用 focusin 并且边框颜色会发生变化。

如果单击“mainDesign”,“div1”只能聚焦。

该脚本有效,但需要单击两次“mainDesign”才能使其工作,在它集中注意力后,该脚本可以完美运行。

有任何想法吗?代码:http: //jsfiddle.net/v3DWf/14/

谢谢。

4

4 回答 4

2

使用 mousedown 和 stopPropagation() 重写:http: //jsfiddle.net/patrickmarabeas/v3DWf/20/

哈哈,看来Royce Feng 打败了我。


我删除了 focusout(),因为这似乎是一个不必要的步骤......

这是可以接受的吗?: http: //jsfiddle.net/patrickmarabeas/v3DWf/15/

编辑:切换功能,现在似乎按预期工作:http: //jsfiddle.net/patrickmarabeas/v3DWf/17/

于 2012-09-13T16:34:48.310 回答
1

您可以切换到使用.mousedown()和停止内部传播。

http://jsfiddle.net/v3DWf/18/

于 2012-09-13T16:47:52.900 回答
0

尝试这个:

$("#div1").focusin(function() {
    $(this).css("border-color","#ff9900");
});

$("#mainDesign").mousedown(function(){
    setTimeout(function(){
        if (!$("#div1").is(":focus"))
            $("#div1").css("border-color","#999999");        
    }, 100);
});  

超时是必要的,因为 mousedown 将在 div 模糊之前触发。

于 2012-09-13T16:45:14.390 回答
-1

那么问题是你已经在 .focusout() 事件中嵌套了 .mousedown() 事件。

所以这里发生的是,当触发 focusout 事件时,您会将 .mousedown 事件附加到 mainDesign div。让我再重复一遍,在 focusout 事件触发之前,不会附加 .mousedown 事件。

然后,一旦附加了 .mousedown 事件,下次您在 mainDesign div 中按下 mousedown 时,该事件将触发,这就是为什么它当前需要您单击两次。

所以最简单的解决方案是简单地摆脱 .focusout 事件。

于 2012-09-13T16:45:25.223 回答