【问题标题】:How to exclude Id from focusout如何从焦点排除中排除 Id
【发布时间】:2013-06-26 17:06:52
【问题描述】:

使用 Jquery,当您在设置“focusout”时单击焦点区域外的任意位置时,才会调用 focusout。

如何从激活“focusout”功能中排除某些 id。 ?

例如这里。

您有一个输入文本字段 (id="A"),它在焦点上隐藏了一些 div,并在它失去焦点时显示该 div,所以现在它显然会在您单击其中任何位置时显示该 div ( "#A") 输入字段。

问题是,你如何设置一些 id(可能是一个选择字段(Id="B" 旁边),而不是触发“focusout”功能。希望它有意义。

【问题讨论】:

  • 你是指你点击的新ID,还是你要离开的ID?
  • 你能添加一些代码吗?
  • 任何将被点击的 id 不是“on focus”事件的发起者。我不认为代码会启发你@Tim,它会增加更多的迷雾,让我们使用外行的术语,“英语”。

标签: javascript jquery html focusout focusin


【解决方案1】:

尝试使用relatedTarget事件属性:

$('#id').focusout (function (e) {

    if (e.relatedTarget && e.relatedTarget.id === 'dontFocusOut') {
        return;
    }
    //do your thing

});

【讨论】:

  • 我也很想试试这个,因为 unbind 只是以一种在单击未绑定的 div 后,“focusout”会死掉的方式杀死该功能。 ,但是这个相关的目标没有运行。
  • “不运行”是什么意思?请注意,如果您的相关目标不是文档的一部分,event.relatedTarget 可能为空。在任何其他情况下,它应该是接收焦点的元素。
【解决方案2】:

当您单击 div 时,您可以 unbindfocusout。这可能会返回一些预期的结果,并且在您的代码中的某个时刻,您可能想要重新绑定它。示例见此处:http://jsfiddle.net/hdCFA/

$("input").on("focus", function() {
    $(".hidden").show();
});
$("input").on("focusout",function() {
    $(".hidden").hide();
});

$(".clickable").on("mousedown", function() { 
    $("input").unbind("focusout"); 
});

HTML:

<input />
<div class="hidden">Hidden div</div>
<div class="clickable">Click me</div>

CSS:

.clickable { background:blue; }
.hidden {
    display:none;
}

【讨论】:

  • 不错,简单直接。谢谢。
  • 大声笑,所以这不会只解除 div 的绑定,而是完全终止该功能,从未绑定的 Id 中,您无法单击其他位置并让 focusout 继续工作。
  • 对,正如我所提到的,您将不得不在代码中的某个位置重新绑定。在不了解应用程序的情况下,很难说何时重新绑定,但这应该可以让您在解决方案上有个良好的开端。
  • 试试这个:jsfiddle.net/hdCFA/1 它使用了一些变量和e.preventDefault();,希望能完成你所追求的。
  • 实际上,您甚至可能不需要变量。这些是我尝试的另一个解决方案的剩余部分。 jsfiddle.net/hdCFA/3
猜你喜欢
  • 2023-04-03
  • 2013-04-25
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多