我有一个简单的文件,里面有一个Jquery脚本,如下所示:
<script type="text\javascript">
$('.grey_title').click(function(){
$(this).parent().find('.inner_div').slideToggle('slow');
});
$('#hideall').click(function(){
$('.inner_div').slideUp('slow');
$(this).parent().html("<span id=\"showall\">Show all Menus</span>");
});
$('#showall').click(function(){
$('.inner_div').slideDown('slow');
$(this).parent().html("<span id=\"hideall\">Hide all Menus</span>");
});
});
</script>
<div><span id="hideall">Hide all Menus</span></div>
该功能在隐藏菜单时工作正常,当你将HTML中的ID更改为showall并将脚本更改为slideToggle时,但是当您单击全部隐藏时它将全部关闭并根据Firefox将项目更改为
<span id="showall">...</span>
但是,再次点击它什么都不做。我能做错什么?
页面
答案 0 :(得分:3)
我希望绑定失败,因为绑定完成后没有showall
更好的选择是toggle
您可能希望切换功能以匹配页面加载时显示的内容
$('#hideall').toggle(
function(){
$('.inner_div').slideUp('slow');
$(this).text("Show all Menus");
},
function(){
$('.inner_div').slideDown('slow');
$(this).text("Hide all Menus");
}
);
答案 1 :(得分:2)
当id消失时,它会分离绑定到它的事件。您可以尝试live
事件绑定。
$('#hideall').live('click', function(){
$('.inner_div').slideUp('slow');
$(this).parent().html("<span id=\"showall\">Show all Menus</span>");
});
$('#showall').live('click', function(){
$('.inner_div').slideDown('slow');
$(this).parent().html("<span id=\"hideall\">Hide all Menus</span>");
});
答案 2 :(得分:0)
您需要使用delegate或live来定义事件。上面的事件只是将处理程序绑定到页面上的现有元素,而live / delegate函数绑定到现有元素和将来元素。
$(document).delegate('.grey_title', "click",function(){
$(this).parent().find('.inner_div').slideToggle('slow');
}).delegate('#hideall'."click", function(){
$('.inner_div').slideUp('slow');
$(this).parent().html("<span id=\"showall\">Show all Menus</span>");
}).delegate('#showall',"click", function(){
$('.inner_div').slideDown('slow');
$(this).parent().html("<span id=\"hideall\">Hide all Menus</span>");
});
</script>
<div><span id="hideall">Hide all Menus</span></div>
答案 3 :(得分:0)
您将click事件绑定到尚不存在的元素...试试这个:
$('#showall').live('click', function(){
$('.inner_div').slideDown('slow');
$(this).parent().html("<span id=\"hideall\">Hide all Menus</span>");
});