我对jQuery还不熟悉,但这似乎应该可以正常工作:
$(document).ready(
function()
{
$("#btn_toggle_transcript").click(
function()
{
$("#transcript_container").slideToggle(1000);
}
);
}
);
...它可以工作,但并不正确。 至少,与预期不同...
我是否正确地假设上面的代码会添加一个单击处理程序到ID为“btn_toggle_transcript”的元素?那么,这个单击处理程序将通过打开目标div(...id为“transcript_container”)来响应单击,如果它关闭了,则关闭它。
当前发生的情况是:点击按钮确实会使div滑动打开。 但是,当它完全打开时,它立即 - 并且没有用户输入 - 再次滑动关闭。
我看到一些论坛帖子建议可能的原因是处理程序被添加两次。 但是,如果我注释掉以上代码,则单击按钮时不执行任何操作。 因此,处理程序没有在其他任何地方添加...
有人能告诉我为什么我的div会自动关闭吗?
按钮的HTML:
<div id="tools_button_container">
<div class="tools_button" id="btn_toggle_transcript"></div>
</div>
<div id="transcript_container">
<div id="transcript_contents"></div>
</div>
同时需要写出CSS样式:
#transcript_container{
z-index:4;
position:absolute;
width:290px;
max-height:455px;
top:51px;
right:-2px;
background-color:#90B2D8;
padding:20px 10px 10px 10px;
border-bottom: 1px solid #000;
border-left: 1px solid #000;
border-right: 1px solid #000;
display:none;
}
#transcript_contents{
max-height:375px;
overflow:auto;
margin:20px 0px 10px 0px;
background-color:#ffffff;
padding:0px 5px 0px 5px;
}
#btn_toggle_transcript {
background: url('images/transcript.png') no-repeat 0 0;
display:block;
}
#circle_btn_toggle_transcript:hover {
background-position: 0px -50px;
}
编辑:
我做了三件事情,似乎有所帮助。为什么它们有效我不知道,但是它们确实有效。
1)Drupal 6.x使用旧版的jQuery(1.2.2)。有一个模块可更新到1.3.2版本。我用1.7.1的文件替换了1.3.2的更新文件,现在我的DOM报告使用jQuery v1.7.1。
2)&3)尽管我只绑定点击事件一次(通过删除绑定并在按钮单击时没有引发任何操作进行验证),但我决定尝试添加一行来删除我的“幻影”绑定,然后再添加实际绑定。基于我的阅读,我决定使用现在推荐的on()和off()方法来添加/删除绑定。我的ready()函数现在如下:
$(document).ready(
function(){
$("body").off("click", "#btn_toggle_transcript");
$("body").on("click", "#btn_toggle_transcript",
function(){
$("#transcript_container").slideToggle(1000);
}
);
}
);
现在,我的滑动div打开并保持打开状态,直到我再次切换关闭。太棒了!非常感谢所有回答/评论的人。您的建议和指导帮助我找到了解决方案。更新:正如我在其中一条评论中提到的那样,这是在Drupal内运行的。同时也提到,如果我注释掉单个绑定,就不会调用任何操作。我的想法是,由于删除了一个绑定就停止调用操作,那么就没有办法绑定两次...愚蠢!虽然我正确地认为只有一块绑定代码,但我完全忘记了我的模块已经将我的js文件添加到页面中。因为我还需要在非Drupal环境中部署我的内容,所以我也手动将js文件添加到我的页面中。...两个包含意味着两个绑定...这是我永远无法挽回的几天!
$(document).ready( function() { $("#circle_btn_toggle_transcript").click( function(e) { e.stopPropagation(); $("#circle_transcript_container").slideToggle(1000); } ); } );
...但是没有任何变化。我做对了吗? - undefined