2011-04-21 64 views
1

显示我想要显示在的focusIn按钮按钮,点击后做一些动作或隐藏事件的内容是按钮:jQuery的 - 点击上的focusIn

$(".editableDiv").live('focusin', function(){ 
    // show button under the .editableDiv div 

    $("#button").live('click', function(){ 
     // do action 
    }); 
    $(".editableDiv").live('focusout', function(){ 
     // hide button 
    }); 
}); 

它显示了焦点的按钮,但是当按钮点击后,该操作将被忽略,该按钮会立即隐藏,就像聚焦输出优先于点击一样。当我尝试删除聚焦部分时,动作完成,但按钮仍然可见...但我需要在聚焦时隐藏该按钮。

这似乎很简单......但我不明白为什么它不工作 - 任何提示将不胜感激。

+0

您正在执行的操作是“onclick”?你可以将'click'的绑定移动到'focusin'处理器的按钮之外,因为它被id绑定。 – 2011-04-21 17:00:20

+2

你真的,真的不应该使用现场。使用'委托()'http://paulirish.com/2010/on-jquery-live/ – 2011-04-21 17:02:09

+0

此外,你可以告诉我们这个jsbin.com或其他? – 2011-04-21 17:02:42

回答

1

发生了什么事是聚焦点是触发并隐藏按钮,然后才能接收点击事件。

那么为什么不在几毫秒后隐藏点击/聚焦的按钮?

$(".editableDiv").live('focusin', function(){ 
    // show button under the .editableDiv div 
    $("#button").show(); 
}).live('focusout', function(){ 
    setTimeout(function(){ 
     $("#button").hide(); 
    },50); 
}); 
$("#button").live('click', function(){ 
    // hide button 
    alert('test'); 
    $("#button").hide(); 
}); 

http://jsfiddle.net/userdude/E2Cyx/2/

+0

广泛使用后,这是正确的答案。 – justkt 2011-04-21 17:40:24

+0

这真的是个好主意......并且它在工作,谢谢! – honzzz 2011-04-21 17:45:34

+0

@justkt - 谢谢,我不得不做类似的事情。 @honzzz - 如果您认为这是正确的答案,请点击答案左侧的投票计数下方的复选标记。 :) – 2011-04-21 17:45:44

2

您需要将您的处理程序分配拖动一下。现在,按钮单击和聚焦输出处理程序仅限于第一个focusin。

最重要的是存在not being able to know(不使用IE特定信息)的问题,什么事件触发了重点(因此你不能将按钮隔离为源)。最好的解决方案似乎是超时解决方案。我会建议代码,如this answer to your question中提供的代码。

+0

演示:http://jsfiddle.net/userdude/RqGKd/ – 2011-04-21 17:17:30

+0

哎呀,我有动作倒退秒。我认为问题仍然存在,主要是,按钮被隐藏之前,它可以收到点击:http://jsfiddle.net/userdude/RqGKd/1/ – 2011-04-21 17:19:12

+0

这产生了与我上面的代码相同的结果。专注似乎隐藏了按钮,然后点击它就可以注册。 – honzzz 2011-04-21 17:22:34

0

这只是当你点击一个按钮时,你基本上关注IT,因此,它激发了聚焦/模糊事件,因为只有焦点。

+0

它看起来像 - 但我怎么能避免它? – honzzz 2011-04-21 17:15:56

0

您需要防止该按钮单击处理事件传播,因为如果不是,按钮获得焦点,而事件的内容函数被调用。

​​
+0

看起来,点击甚至没有被调用,因为在此之前调用聚焦函数...所以在该点击函数内部添加.stopPropagation()也不会被调用。 – honzzz 2011-04-21 17:37:49

+0

是的,没错!点击事件绑定必须来自焦点 – 2011-04-26 07:52:26