jQuery:如果$(this)或其他元素模糊,那么

时间:2011-11-29 13:58:29

标签: javascript jquery jquery-selectors event-handling elements

如果当前活动元素$(this)或其他预定义元素(例如:div#tooltip)模糊,我想触发一个函数。但到目前为止,我还没有发现如何做到这一点。我试过了:

$(this).add('div#tooltip').live('blur', function(){
    $('div#tooltip').hide();
});

想象一下,$(this)将是一个输入字段,例如,预定义的第二个元素将是一个工具提示div,如果其中一个模糊,我希望工具提示隐藏。

修改: div#tooltip包含一个锚点,如果点击它,它不应该使div#tooltip隐藏。

编辑2 : 好的,这是对我的问题的更准确的解释。我有$ .fn.tooltip函数,我将其应用于具有可变类名和id的各种文本输入。因此,此输入在函数中只能称为 $(this) 其次我有工具提示div,它由函数创建。这个div的ID是#tooltip。此工具提示/ div可以包含一些其他元素,例如锚点 单击输入字段(this)时会自动显示工具提示。一旦关闭,即使输入字段再次聚焦,它也不会再次显示。

我想做的是:

  

当文本输入失去焦点时,必须删除工具提示    EXCEPT 如果光标位于工具提示/ div内,或者是否点击了此div中的元素。

任何?

2 个答案:

答案 0 :(得分:1)

像这样:http://jsfiddle.net/uu3zX/7/

HTML:

<input type="text" class="with-tooltip">
<span class="tooltip">?<a style="display:none" href="#">The tip</a></span>

JavaScript的:

$('.with-tooltip').on('focus', function(){
    $(this).next().children().show();
});

$('.with-tooltip').on('blur', function(){
    $(this).next().children().hide();
});

$('.tooltip').hover(
    function(){
       $(this).children().show();
    },
    function(){
       $(this).children().hide();
    }
);

<强>更新 添加了替代解决方案以适应OP请求以使用this

答案 1 :(得分:0)

借用IntoTheVoid的小提琴:您应该将输入和工具提示包装在容器div(或其他容器元素)中,以便在一行中执行此操作:

$('.tooltip, input').on('mouseout', function(){
    $(this).parent().children('.tooltip').hide();
}).on('focus mouseover', function(){
    $(this).parent().children('.tooltip').show();
});

http://jsfiddle.net/mblase75/uu3zX/5/