【问题标题】:Jquery how to trigger function if clicked?如果单击,Jquery如何触发功能?
【发布时间】:2011-12-08 12:11:49
【问题描述】:

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

这是我的 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 不可见时,该功能也处于活动状态。

【问题讨论】:

  • 您需要稍微澄清一下您的问题。另请参阅stackoverflow.com/questions/178325/…
  • 您的代码并不完全清楚,但看起来您需要 :visible,而不是 show()。即 - if ($('.error:visible)){ } api.jquery.com/visible-selector
  • 问题是当点击带有 .error 类的链接时,div .super 没有显示,因为文档点击功能被触发并且超级 div 被隐藏。隐藏super div的文档点击应该只在super div可见时才有效。

标签: javascript jquery jquery-plugins jquery-selectors


【解决方案1】:

为什么不添加一个名为 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 语句中,在进行任何检查之前必须首先发生一个事件...

编辑:

看着你的 js fiddle 我意识到我犯的错误,应该是 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");
});

【讨论】:

  • 你能告诉我如何隐藏页面上的 .super 只在可见的情况下点击吗?为什么我应该使用一个叫做 active 或 vivisable 的类?
  • 更新了我的答案,为什么要使用类?它可以更轻松地检查某些内容是否处于活动状态,而且该类可能附加了一些 css 样式,我一直使用这种方法...@Rails 初学者 - 有意义吗?
  • 它不起作用,div 没有在点击时显示。我认为是因为 if($('.super').hasClass("active")) 在点击元素的同时被激活。
  • @Railsbeginner - 查看更新后的代码,我添加了 .show(),当您执行 e.preventDefault() 事件时不会传播到文档,因此该文档单击事件将永远不会发生。 .
  • 仍然没有出现 div onclick。您还缺少 if 语句中的 {}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多