单击运行两次
on Click running twice
http://jsfiddle.net/uTV5k/19/
你好,
我在我的移动网站上使用以下脚本。请参阅模拟脚本和标记的jsfiddle。
下面的脚本正是我的移动网站上的内容,js fiddle就是它的复制品
在jsfiddle中,点击交替操作很好。第一次单击将打开动画,第二次单击将关闭动画。
我的移动网站上的问题,第一次点击打开动画,第二次点击后立即运行。但在小提琴中,它运行良好。
$(window).load(function(){
$(window).bind("orientationchange resize", function(e) {
$('.home-mod').each(function() {
var homeModule = $(this).height(),
homeTitle = $(this).find('.home-title-button').outerHeight(),
homeStart = homeModule - homeTitle,
homeOpen = false;
$(this).find('.mod-info').css("top", homeStart + "px");
$(this).on('click', function () {
if (homeOpen) {
// second click alternation
$(this).find('.mod-info').animate({ top: homeStart + "px" });
homeOpen = false;
} else {
// first click alternation
$(this).find('.mod-info').animate({ top: 0 });
homeOpen = true;
}
});
});
}).trigger("resize");
});
我真的不知道为什么会发生这种事。在iScroll中使用这个应该不会引起任何问题,是吗?
提前感谢
首先:窗口加载发生
您正在呼叫
.trigger("resize");
这在点击时激活绑定。
later on
-如果窗口加载再次发生-它会再次触发代码-重新绑定点击
fiddle代码和实时代码之间的区别在于存在调整大小/方向处理程序。
所有其他代码都在里面,这意味着每次运行调整大小处理程序时都会运行它。http://jsfiddle.net/uTV5k/20/是你摆弄那个处理程序的变种。它行为不端。
您可以先删除旧的单击处理程序,然后再使用.off('click')
添加新的单击处理。
此fiddle包含了此更新,并且似乎再次出现:http://jsfiddle.net/uTV5k/21/
解决此问题的另一种(可能更好)方法是重新计算调整大小时所需的值,并将其全局存储。然后可以添加一次单击函数并引用这些全局值。这是一个更大的代码重写,我只是选择了一个非常简单的解决方案来突出您的问题。
相关文章:
- Append元素在运行两次函数后不显示
- 我的所有代码在使用Webpack编译时都会运行两次
- 为什么两次运行完全相同的正则表达式的结果不同
- JavaScript/JQuery表单验证运行两次
- 若在两个不同的选项卡中打开同一个页面,如何防止javascript运行两次
- jQuery停止函数运行两次
- Socket.IO:重新连接导致服务器连接代码运行两次
- Gulp任务似乎运行了两次,而不是一次
- 函数jQuery.animation()运行了两次行,但不起作用
- nodejs - 为什么我的异步函数运行两次
- 模板函数在加载网页时运行两次
- 为什么 document.onreadystatechange 运行两次
- 我需要运行此功能两次
- 为什么 ajax 'application/json' 要运行 PHP 代码两次
- 必须在 Firefox 中运行两次 removeChild()
- nodeJs,运行两次sql可以将它们组合成json
- 防止脚本在执行时运行两次
- D3.js键功能在简单的选择器/数组组合上运行两次
- JS运行两次不起作用
- 如何防止 iframe 运行两次加载事件