如何使用jquery模糊调用函数除非单击链接?

时间:2010-10-29 15:07:13

标签: javascript javascript-events jquery

我有一个小的jquery脚本:

$('.field').blur(function() {
    $(this).next().children().hide();
});

隐藏的孩子包含一些链接。这使得无法单击链接(因为它们被隐藏)。什么是适当的解决方案?

这就像我得到的那样接近:

$('.field').blur(function() {
       $('*').not('.adress').click(function(e) {
            foo = $(this).data('events').click;
            if(foo.length <= 1) {
//             $(this).next('.spacer').children().removeClass("visible");
            }
            $(this).unbind(e);
        });
});

未注释的行假设是指模糊的字段,但它似乎不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

你可以稍微延迟一下,如下:

$('.field').blur(function() {
  var kids = $(this).next().children();
  setTimeout(function() { kids.hide(); }, 10);
});

这使您有时间在这些子链接消失之前点击。

答案 1 :(得分:0)

这就是我最终做到的方式:

var curFocus;
    $(document).delegate('*','mousedown', function(){
        if ((this != curFocus) && // don't bother if this was the previous active element                
            ($(curFocus).is('.field')) && // if it was a .field that was blurred
            !($(this).is('.adress'))
        ) {
            $('.' + $(curFocus).attr("id")).removeClass("visible"); // take action based on the blurred element
        }

        curFocus = this; // log the newly focussed element for the next event
    });

答案 2 :(得分:-1)

相信你可以在这种情况下使用.not('a'):

$('.field').not('a').blur(function() {
    $(this).next().children().hide();
});

这未经过测试,因此我不确定这是否有效。