jQuery .focusOut()取决于下一个选定元素的条件操作

时间:2011-03-17 02:12:04

标签: jquery

我有一个包含文字输入#usernameInput和链接#saveLink的表格单元格。使用jQuery我有一个分配给#saveLink的click事件的函数。

我想要实现的是,当#usernameInput失去焦点时我想隐藏它。除非它失去焦点#saveLink。 换句话说,如果用户点击#saveLink以外的其他任何地方我要隐藏#usernameInput,否则请在#saveLink上调用点击事件。

我处理$('#usernameInput').focusout()没问题,但我无法检测是否点击了保存链接。

这是我到目前为止所拥有的。

<script type="text/javascript">

$('#usernameInput').focusout(function ()
{

    if (!$('#saveLink').is(':focus'))
    {
        $('#usernameInput').hide();
    }
    return;

});</script>

2 个答案:

答案 0 :(得分:5)

  

我想要实现的目标是什么时候   '#usernameInput'失去了焦点我   想隐藏它。除非失去焦点   到'#saveLink'。换句话说,如果   用户单击除以外的任何位置   '#saveLink'我想要隐藏   '#usernameInput'否则调用   单击'#saveLink'上的事件。

也许你可以将一个事件绑定到正文并只检查e.target

$("body").click(function(event){
  if(!$(event.target).is("#saveLink")){
    $("#usernameInput").hide();
  }
});

免责声明 这只是现在的伪代码...稍微更新。

答案 1 :(得分:2)

我不确定这是否是新的,但我发现今天找到了更好的方法(3。5年后): event.relatedTarget 是您实际点击的元素。

$elementLosingFocus.focusout(function (event) {
    var $elementYouAreTesting;

    $elementYouAreTesting = $("#whatever");

    if (elementYouAreTesting[0] === event.relatedTarget) {
        // you clicked the element you were testing!
    } else {
        // you clicked something else
    }
});