Jquery显示/隐藏不起作用

时间:2010-02-24 05:14:04

标签: jquery html

我有这个jquery脚本,它假设在单击的超链接上隐藏/显示div元素。我不知道为什么但它根本不起作用。以下是我的代码以外的内容。

function hide_current_commoncontainer(commoncontainer){
   $(commoncontainer).each(function(){
 if(this.is(":visible")){this.hide();} 
 });
}

function init(){
$("#compose_link").bind("click",function(){
 hide_current_commoncontainer(".pmcommoncontainer");
 ("#composer").show();  
 return false;
 }
);

if(Drupal.jsEnabled){  
 $(document).ready(init);
} 

我已查明原因并发现显示/隐藏功能无法正常工作。其余的 - 函数调用 - 没问题。谁能告诉我我做错了什么?我应该在哪里修改我的代码,以便按照我想要的方式隐藏/显示div元素。

6 个答案:

答案 0 :(得分:10)

好的,我发现了为什么$(“#composer”)。show()无效。这是因为我将这些div的可见性样式硬编码为“隐藏”,而jquery的“show”方法无法将其恢复。奇怪的是,与“show”方法相反,“hide”可以毫无问题地恢复硬编码的“可见”风格。因此,为了按预期隐藏/显示元素,我要么必须使用hide / show方法组合而没有可见性样式硬编码或使用jquery的css方法并将可见性样式设置为欲望。

答案 1 :(得分:5)

您在$("#composer").show();

之前错过了this

不应该是$("#composer").show();$(this)吗?另外,请确保您已完成show/hide

的定义

答案 2 :(得分:4)

我建议你做点什么

$(function() {
    $('#compose_link').click(function(e) { 
        $('.pmcommoncontainer').children(':visible').hide();
        $('#composer').show();
        e.preventDefault();
    });
});

将显示具有composer id的元素,并在单击具有id compose_link的元素时隐藏类pmcommoncontainer的所有可见子元素。

我认为这就是你想要做的事情 - 不需要迭代,因为jQuery适用于集合:)。

修改

看起来您还希望停止点击或发布 - 通过事件您可以使用preventDefault()函数来停止该行为。

答案 3 :(得分:2)

我认为在您的代码示例中需要调整几个方面。

更换

("#composer").show();  

WITH

$("#composer").show();  

<小时/>

更换

if(this.is(":visible")){this.hide();} 

WITH

if($(this).is(":visible")){$(this).hide();} 

答案 4 :(得分:1)

jQuery的show()和hide()方法不适用于CSS visibilty属性。可以通过使用css()函数来实现效果。

将您的代码更改为

$(#composer).css('visibility', 'visible');

if($(this).is(":visible")){$(this).css('visibility', 'hidden');}

答案 5 :(得分:0)

而不是this,您必须将$(this)用于jquery对象。