如何在textarea聚焦时显示div并在texQuery中使用jQuery模糊时隐藏它?

时间:2015-05-23 05:55:44

标签: javascript jquery

所以我的问题有点复杂,然后我可以适应标题。我试图重新创建像trello如何评论卡片的东西。 在trello上,当您单击新注释textarea内部时,textarea会展开并包含一个包含"提交注释"链接以及其他几个不同操作的链接显示(让我们称之为" links-div"。

他们只是通过添加一个" is-focused" class到" links-div"的父div。并通过CSS处理未隐藏。

我被困的地方是,如果你点击textarea外面(模糊它),textarea会缩小并缩小" links-div"再次隐藏除非您点击" links-div"内的其中一个链接。

我想重新创建此内容,并且可以点击我的" links-div"中的链接或提交按钮。没有它隐藏,但如果我点击那些" links-div"之外的任何东西,它应该正常隐藏。我将如何重建这个?感谢。

2 个答案:

答案 0 :(得分:1)

这是一个潜在的解决方案jsbin

这可以通过监控focus内元素的blur.comment事件,并在.comment本身上切换类来实现。

blur内的元素发生.comment事件时,我们可以使用e.relatedTarget找出具有新焦点的元素。然后我们可以检查新聚焦的元素是否存在于.comment内。如果是,我们“取消”blur。如果没有,我们会继续照常进行。

HTML

<div class="comment">
    <textarea id="ta"></textarea>
    <div class="controls">
        <button>One</button>
        <a href="#">Two</a>
    </div>
</div>

<div>
    <a href="#">This is outside the comment</a>
</div>

CSS

.comment .controls {
    display: none;
}

.comment.is-focused .controls {
    display: block;
}

Javascript / jQuery

// The selector ".comment *" will grab any element INSIDE a .comment
$('.comment *').on('focus', function () {
    // Whenever an element inside a comment gets the focus, give
    // its parent element a class
    $(this).parents('.comment').addClass('is-focused');
});

$('.comment *').on('blur', function (e) {
    var $newFocus = $(e.relatedTarget);

    if ($newFocus.parents('.comment').length > 0) {
        // The newly focused element is inside a comment (potentially
        // not the SAME comment - you'll want to fix this) so cancel
        // the blur
        e.preventDefault();
        return;
    }

    // The newly focused element is outside a comment, so continue
    // to blur this element and also remove our class
    $(this).parents('.comment').removeClass('is-focused');
});

答案 1 :(得分:0)

所以我在经过@Alex McMillan的回答后得到了这个工作。它实际上比我更简单。我没有在textarea上使用.on 'focus'.on 'blur'事件,而是在文档中使用了.on 'mousedown'事件。

这是一个jsfiddle https://jsfiddle.net/h9ohkzdf/8/

我可以尝试使用包含div而不是整个文档,看看是否有效。