我有两个div,一个名为“mainDesign”,另一个名为“div1”。
单击“div1”时,将调用focusin并更改边框颜色。
“div1”只能在单击“mainDesign”时进行聚焦。
该脚本有效,但需要点击“mainDesign”两次以使其正常工作,在重点突出后,脚本才能完美运行。
有什么想法吗? 代码:http://jsfiddle.net/v3DWf/14/
感谢。
答案 0 :(得分:2)
使用mousedown和stopPropagation()重新编写:http://jsfiddle.net/patrickmarabeas/v3DWf/20/
哈哈,看起来罗伊斯冯打败了我。 我删除了focusout(),因为它似乎是一个不必要的步骤......
这可以接受吗?:http://jsfiddle.net/patrickmarabeas/v3DWf/15/
编辑:切换功能,似乎按预期工作:http://jsfiddle.net/patrickmarabeas/v3DWf/17/
答案 1 :(得分:1)
您可以切换到使用.mousedown()
并停止传播内部传播。
答案 2 :(得分:0)
试试这个:
$("#div1").focusin(function() {
$(this).css("border-color","#ff9900");
});
$("#mainDesign").mousedown(function(){
setTimeout(function(){
if (!$("#div1").is(":focus"))
$("#div1").css("border-color","#999999");
}, 100);
});
超时是必要的,因为moused会在div模糊之前触发。
答案 3 :(得分:-1)
问题是你在.focusout()事件中嵌套了.mousedown()事件。
所以这里发生的事情是,当触发焦点事件时,您将.mousedown事件附加到mainDesign div。让我再次重复一次,在触发焦点事件之前,不会附加.mousedown事件。
然后,一旦附加了.mousedown事件,下次你在mainDesign div中进行操作时,事件就会触发,这就是为什么它当前会让你点击两次。
所以最简单的解决方案就是简单地摆脱.focusout事件。