繁体   English   中英

当文本区域被聚焦时,如何显示div;当jQuery中文本区域模糊时,如何将其隐藏?

[英]How do I show a div when a textarea is focused and hide it when the textarea is blurred in jQuery?

所以我的问题要复杂一些,然后我才能填写标题。 我正在尝试重新创建类似trello如何在卡片上发表评论的内容。 在trello上,当您在新评论文本区域内单击时,该文本区域将展开,并显示一个div,其中包含“提交评论”链接以及用于其他操作的其他一些链接(请将该div称为“ links-div”。

他们只是通过在“ links-div”的父div中添加“以焦点为重点”的类来完成此操作,并通过CSS处理取消隐藏。

我被卡住的地方是,如果您在文本区域之外单击(使其模糊),则文本区域会缩小,并且除非您单击“ links-div”内部的链接之一,否则“ links-div”会再次隐藏。

我想重新创建它,并且能够在我的“ links-div”内单击链接或提交按钮而不会隐藏它,但是,如果我单击该“ links-div”之外的任何内容,它应该照常隐藏。 我将如何重新创建它? 谢谢。

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

通过监视.comment内元素的focusblur事件,以及在.comment本身上切换类来工作。

.comment内部的元素上发生blur事件时,我们可以使用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');
});

因此,在仔细阅读@Alex McMillan的回答后,我开始了这项工作。 实际上,这比我想的要简单。 我没有在文本区域上使用.on 'focus'.on 'blur'事件,而是在文档上使用了.on 'mousedown'事件。

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

我可能会尝试并使用一个包含div而不是整个文档,看看是否可行。

隐藏父 div 时包含<textarea>&lt;i&gt;?&lt;/div&gt;&lt;/i&gt; &lt;b&gt;?&lt;/div&gt;&lt;/b&gt;</textarea><div id="text_translate"><p> 我有一个由其内容动态生成的 div 结构。 它看起来像这样:</p><pre> &lt;div class="fpd-list-row fpd-add-layer" id="1609962837979"&gt;&lt;div class="fpd-cell-0"&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="fpd-cell-1"&gt;Dein Foto&lt;/div&gt;&lt;div class="fpd-cell-2"&gt;&lt;span class="fpd-icon-add"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="fpd-list-row" id="1609962838288"&gt;&lt;div class="fpd-cell-0"&gt;&lt;span class="fpd-current-color" style="background: #ffffff" data-colors=""&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="fpd-cell-1"&gt;&lt;textarea&gt;Wanderlust&lt;/textarea&gt;&lt;/div&gt;&lt;div class="fpd-cell-2"&gt;&lt;span class="fpd-lock-element"&gt;&lt;span class="fpd-icon-unlocked"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</pre><p> 我只想隐藏 textareas 和 parent 元素到 .fpd-list-row 但保持其他 div like.fpd-list-row.fpd-add-layer 不变。 当我将 textarea 设置为不显示时,父 div 仍然存在。 有没有办法仅在包含&lt;textarea&gt;时将父 div 隐藏到 ..fpd-list-row ?</p></div>

[英]Hide parent div when it contains <textarea>?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我如何隐藏 <div> 并仅在 <textarea> 有重点吗? jQuery-将光标放在文本区域的末尾 如何确定切换文本区域的重点? 隐藏父 div 时包含<textarea>&lt;i&gt;?&lt;/div&gt;&lt;/i&gt; &lt;b&gt;?&lt;/div&gt;&lt;/b&gt;</textarea><div id="text_translate"><p> 我有一个由其内容动态生成的 div 结构。 它看起来像这样:</p><pre> &lt;div class="fpd-list-row fpd-add-layer" id="1609962837979"&gt;&lt;div class="fpd-cell-0"&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="fpd-cell-1"&gt;Dein Foto&lt;/div&gt;&lt;div class="fpd-cell-2"&gt;&lt;span class="fpd-icon-add"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="fpd-list-row" id="1609962838288"&gt;&lt;div class="fpd-cell-0"&gt;&lt;span class="fpd-current-color" style="background: #ffffff" data-colors=""&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="fpd-cell-1"&gt;&lt;textarea&gt;Wanderlust&lt;/textarea&gt;&lt;/div&gt;&lt;div class="fpd-cell-2"&gt;&lt;span class="fpd-lock-element"&gt;&lt;span class="fpd-icon-unlocked"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</pre><p> 我只想隐藏 textareas 和 parent 元素到 .fpd-list-row 但保持其他 div like.fpd-list-row.fpd-add-layer 不变。 当我将 textarea 设置为不显示时,父 div 仍然存在。 有没有办法仅在包含&lt;textarea&gt;时将父 div 隐藏到 ..fpd-list-row ?</p></div> 当我单击评论系统javascript而不是jquery上的回复按钮时,显示textarea或div(在要回复的评论下方) jQuery:包含textarea值的div,当我单击div中的一个单词时,使其在textarea中单击 单击按钮后应用替换功能后,如何显示文本区域的值(不是在警报中而是在文本区域中)? 在Textarea中输入文本时,如何在div中显示文本 使用$(&#39;div&#39;)和CSS(JavaScript)时如何在textarea中显示输出 当用户在搜索栏上键入时,如何显示/隐藏 textarea 值?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM