我有这个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元素。
答案 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();
$("#composer").show();
<小时/>
if(this.is(":visible")){this.hide();}
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对象。