我已经使用了这个脚本很长一段时间了,我对jQuery几乎不擅长,所以当我看到这个从j.1的v.1.9x中删除时,我找不到一个对jQuery有意义的修复我(除了添加migrate插件修复它但添加了很多脚本)。任何帮助将不胜感激,所以我可以学习如何复制这种行为。谢谢!
$(document).ready(function () {
$("#switcher-wrapper .toggle").toggle(function () {
$("#switcher-wrapper").animate({
left: "-1px"
});
$(this).addClass("selected");
return false;
}, function () {
$("#switcher-wrapper").animate({
left: "-242px"
});
$(this).removeClass("selected");
return false;
});
});
这适用于1.8.3但在1.9 jQuery中做的很奇怪。
答案 0 :(得分:4)
切换已从1.9(see here)
中删除请改为:
$("body").on('click', '#switcher-wrapper .toggle' function () {
if($(this).hasClass('selected')) {
$("#switcher-wrapper").animate({
left: "-242px"
});
$(this).removeClass("selected");
} else {
$("#switcher-wrapper").animate({
left: "-1px"
});
$(this).addClass("selected");
}
return false;
});
答案 1 :(得分:1)
这是一个很好的例子,说明为什么不需要基于事件的.toggle()
,实际上会导致重复的代码,因为两个切换的函数是分开的。
.toggle()
方法的内部状态管理。旧代码存在两种状态指示不同步的风险,这是很常见的事情。e.delegateTarget
代替重新指定包装元素可能会使代码更具可重用性。委托目标是当前处理委派的单击事件的元素,而不是单击的最内层目标。.stop()
有助于防止这种情况发生。```
$("#switcher-wrapper").on("click", ".toggle", function (e) {
var selected = $(this).hasClass("selected");
$(e.delegateTarget).stop().animate({
left: selected? "-242px" : "-1px"
});
$(this).toggleClass("selected", !selected);
});
```