我现在正在撕开我的头发......我无法弄清楚如何让jQuery $("thing").is(":focus")
选择器在我的代码中使用<select>
标记。这就是我所拥有的:
<input id="uText" name="uText" type="text" required/>
<select id="uCarrier" name="uCarrier" style="display: none;">
<option value="NULL" selected="selected">Select One</option>
<option value="AT&T">AT&T</option>
</select>
用这个js
$("#uText").on("focus", function()
{
if ( !$("#uCarrier").is(":visible") )
{
$(this).stop(true).animate({width:"50%"},400);
$("#uCarrier").stop(true).hide().delay(400).fadeIn(400);
}
});
$("#uText").on("blur", function()
{
if ( !$("#uCarrier").is(":focus") )
{
$("#uCarrier").stop(true).fadeOut(400);
$($("#uText")).stop(true).show().delay( 400 ).animate({width: "96%"}, 400);
}
});
有没有人有这个难题的解决方案??!?
答案 0 :(得分:1)
这是因为blur
事件在焦点转移到select元素之前触发。您可以使用演示小提琴中添加的日志语句查看事件序列。
这里的一个可能的解决方案是使用setTimeout
检查下面给出的focus
条件,它将条件的执行延迟几毫秒,焦点将转移到目标元素< / p>
$("#uText").on("blur", function() {
setTimeout(function(){
if ( !$("#uCarrier").is(":focus") ){
$("#uCarrier").stop(true).fadeOut(400);
$($("#uText")).stop(true).show().delay( 400 ).animate({width: "96%"}, 400);
}
}, 20)
});
演示:Fiddle
答案 1 :(得分:1)
所以这就是你网页上发生的事情:
<select>
处理程序显示onFocus
。<select>
,这会导致两件事情发生:<input>
运行其blur
处理程序。<select>
获得焦点。所以Arun是对的:你只需要做setTimeout等待几毫秒的时间让选择框获得焦点。 :d
祝你的项目好运!