Javascript blur()-Don';隐藏活动div

Javascript blur()-Don';隐藏活动div,javascript,jquery,html,blur,Javascript,Jquery,Html,Blur,如果在blur()上单击,为什么这段代码会隐藏用作jQuery选择器的div?Blur()应该只在单击它的外部时隐藏它 HTML触发器: <div class="header">To-Do <a class="triggernewtodo">Add a task...</a></div> <li class="addnewtodo"> <form> <textarea class="addtodotextar

如果在blur()上单击,为什么这段代码会隐藏用作jQuery选择器的div?Blur()应该只在单击它的外部时隐藏它

HTML触发器:

<div class="header">To-Do <a class="triggernewtodo">Add a task...</a></div>
<li class="addnewtodo">
<form>
    <textarea class="addtodotextarea"></textarea>
    <div class="controlarea">
    <input class="primary" name="commit" type="submit" value="Add" />
    </div>
</form>
</li>
// Show/Hide New Todo form
$('a.triggernewtodo').click(function() {
    $('li.addnewtodo').show()
    $('textarea.addtodotextarea').focus();
});

$('li.addnewtodo').live("blur", function() {
    $(this).hide();
})

我的猜测是,它与放置在文本区域上的.focus()有关,因为如果我取出.focus(),它会正常工作,直到我在文本区域内单击,然后单击out(仍在列表项内),它会隐藏整个列表项。有什么想法吗?我做错了什么?

我怀疑你看到的是一个从LI内部“冒出来”的事件。本质上,输入的“模糊”事件触发该输入上的所有“模糊”处理程序。然后它触发窗体上的所有“模糊”处理程序。然后它触发LI上的“模糊”处理程序-隐藏它

除非调用以防止此情况发生,否则事件将一直持续到DOM树。在您的情况下,您应该能够使用该属性查看事件是否确实起源于LI,并且仅在该情况下隐藏它(警告:未测试):

希望有帮助


PS:有关其他注意事项,请参阅上的页面。

为什么要使用
$。live
?它已被弃用。此外,请不要发布服务器端语言代码,粘贴生成的html当问题与后端代码无关时,最好将呈现的html包含在问题中,而不是包含创建问题的代码。我可以猜您的文本区域位于li元素内。为该元素提供焦点时,li元素将执行模糊功能。因此,隐藏它。在隐藏它之前,您可以检查textarea元素是否有焦点。好吧,对不起,我编辑它是为了显示生成的html而不是服务器端代码。
$('li.addnewtodo').live("blur", function(event) {
    if(event.target == this)
    {
        $(this).hide();
    }
});