jQuery检查项目是否在焦点中,如果没有,则对其采取行动
本文关键字:如果没有 是否 项目 焦点 jQuery 检查 | 更新日期: 2023-09-27 18:33:08
单击文本框周围的div时,我有一个区域向下滑动,该区域随后显示另一个文本框和一个按钮...基本上是提交问题的所有控件(标题、内容、提交按钮)。
但是,如果用户单击了除两个文本框或按钮之外的任何内容,我希望显示的区域向上滑动。
我需要的是一个jquery方法来调用两个文本框和按钮的onBlur,以检查文本框或按钮是否不在焦点中,这将向上滑动(.slideUp)该区域。
我如何使问题内容滑落很简单......
$(function () {
$('.QuestionContentExpandClick').click(function () {
/**** Slide the content div ****/
var viewContent = $('#DivExpandQuestionContentArea');
viewContent.slideDown('slow', function () {
});
});
});
这是正在使用的 .net 控件。
<asp:PlaceHolder ID="PhdTopQuestionArea" runat="server">
<div class="KBTopQuestionContainer">
<asp:TextBox ID="TxtQuestionReference" CssClass="QuestionReference" runat="server" />
<asp:HiddenField ID="HidQuestionTracker" runat="server" />
<table class="Table100PercentWidth">
<tr>
<td id="TbcKBTopQuestionImageCell" runat="server" class="KBTopQuestionImageCell">
<asp:HyperLink ID="HlkAskQuestionProfileImage" runat="server">
<asp:Image ID="ImgAskQuestionProfileImage" runat="server" CssClass="KBTopQuestionImage" />
</asp:HyperLink>
</td>
<td>
<div class="KBTopQuestionContainerDiv">
<div id="DivExpandQuestionClickArea" runat="server">
<asp:HyperLink ID="HlkAskQuestionRedirect" runat="server" EnableViewState="false">
<asp:TextBox ID="TxtAskQuestionTitle" runat="server" CssClass="KBTopQuestionTitleTextbox" Text="Ask a Question about this topic..."
onfocus="feedbackTextBoxFocus(this,'Ask a Question about this topic...')" onblur="feedbackTextBoxBlur(this,'Ask a Question about this topic...')" />
</asp:HyperLink>
</div>
<div id="DivExpandQuestionContentArea" style="display:none;">
<div style="margin-top:15px;">
<asp:TextBox ID="TxtAskQuestionContent" runat="server" TextMode="MultiLine" Rows="7" CssClass="KBTopQuestionContentTextbox" Text="Add the content for your question..."
onfocus="feedbackTextBoxFocus(this,'Add the content for your question...')" onblur="feedbackTextBoxBlur(this,'Add the content for your question...')" />
</div>
<div style="text-align:right;margin-top:10px;">
<asp:Button ID="BtnAskQuestion" runat="server" CssClass="KBTopQuestionButton" Text="Post Question" OnClick="BtnAskQuestion_Click" />
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
提前感谢您的任何帮助:)
根据上面提供的代码,我有点困惑,但要回答您的基本问题,您可以使用 document.activeElement
检查元素是否处于焦点中。因此,如果您有一个带有 id 的文本区域TxtQuestionReference
您的代码将如下所示:
var textbox = document.getElementById('TxtQuestionReference'):
if (document.activeElement === textbox) {
// do stuff
} else {
// do other stuff
}
诀
窍是查看哪些控件将要从focusout
事件内部获得焦点。
为此,请使用延迟很小的setTimeout
,将检查放在下一个浏览器 JS 周期上(此时下一个项目已聚焦)。
$('#DivExpandQuestionContentArea input').focusout(function () {
var $container = $(this).closest('#DivExpandQuestionContentArea');
// wait for the new element to be focused
setTimeout(function () {
// See if the new focused element is in the editor
if ($.contains($container[0], document.activeElement)) {
// we are still focused on the group of controls
}
else
{
// we are not focused on this group
}
}, 1); // Wait 1 cycle (0 should work just as well, but not tested)
});
您还可以在此处查看我的答案以获取更多详细信息:如何检测div 何时失去焦点?