如果点击,Jquery如何触发函数?

时间:2011-10-15 21:30:49

标签: javascript jquery jquery-plugins jquery-selectors

我正在尝试创建一个简单的错误消息,该消息应该在页面点击时消失。

这是我的Jsfiddle:http://jsfiddle.net/ZKgWR/1/

我希望在信息可见时,在页面上点击时隐藏.super消息。

这是我的jquery:

// show super on click
$('.error').click(function(e) {
    e.preventDefault();
    var position = $(this).position();
    $('.super').css({
        display: 'block',
        position: 'absolute',
        left: position.left + 50,
        top: position.top
    });
    var super = true
});


// If .error clicked then enable the function to remove the super message
if ($('.error').show()) {
    $(document).click(function() {
        $('.super').hide();
    });
}


// If .error clicked then enable the function to remove the super message
if ($('.error').show()) {
    $(document).click(function() {
        $('.super').hide();
    });
}

问题是这部分代码无效:

if ($('.error').show()) {
    $(document).click(function() {
        $('.super').hide();
    });
}

单击.error时没有任何附加内容,因为当.super不可见时,该功能也处于活动状态。

1 个答案:

答案 0 :(得分:0)

为什么不添加一个名为active或visible的类?

$('.error').click(function (e) {
e.preventDefault();
var position = $(this).position();
$('.super')
   .show()
  .css({display: 'block', position: 'absolute', left: position.left + 50, top: position.top})
.addClass("active");
});

$(document).click(function() {
   if($('.super').hasClass("active"))
     $('.super').removeClass("active").hide();
});

你的错误出现在if语句中,在进行任何检查之前必须先发生第一次事件......

修改

看着你的小提琴我意识到我犯了错误,应该是e.stopPropogation,这是一个完整的代码:

$(document).click(function(e) {
    if($('.super').hasClass("active"))
        $('.super').hide();
});

$('.error').click(function(e) {
    e.stopPropagation();
    var position = $(this).position();
    $('.super').fadeIn(250).css({
        display: 'block',
        position: 'absolute',
        left: position.left + 50,
        top: position.top
    }).addClass("active");
});