j查询点击事件在第二次点击后不正确
jQuery click event not correct after second click
我整个晚上都在玩这个,但似乎无法弄清楚我的代码出了什么问题。
http://jsfiddle.net/486egfut/
当您单击menu
按钮时,将显示导航,并使用CSS进行动画处理。当您再次单击它时,它会消失。也是CSS动画。
但是,如果第三次单击它,则会添加类collapsed
,并立即再次删除。
这样做的正确方法是什么。使用 CSS 对元素的高度进行动画处理,并使用 jQuery 在动画后切换display
?
我也尝试了多个.on()
事件,但没有成功(见下文)
$('body').on('click', '.icon-mobile-menu', function(e){
e.preventDefault();
$(this).addClass('menu-open');
$nav.addClass('collapsed').height(312);
}).on('click', '.menu-open', function(e){
e.preventDefault();
$(this).removeClass('menu-open');
$nav.css('height', '').on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
$nav.removeClass('collapsed');
});
});
谢谢。
问题是,当高度发生变化时,包括尝试折叠对话框时,您绑定的过渡效果的处理程序会触发 EVERYTIME。
这是一个有效的修复程序,尽管它有点脏:
$(document).ready(function () {
var $nav = $('.navigation'),
$header = $('.header');
$('.icon-mobile-menu').on('click', function () {
$(this).toggleClass('menu-open');
if ($nav.hasClass('collapsed')) {
$nav.css('height', '').on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () {
// Fix goes here
if ($nav.height() == 0){
$(this).removeClass('collapsed');
}
});
} else {
$nav.addClass('collapsed').height(75); // fixed height is for demo purposes only.
}
});
});
http://jsfiddle.net/486egfut/12/
注意:首次点击之所以有效,是因为您仅在首次点击时绑定了该转换处理程序。
你可以试试
(function ($) {
$(document).ready(function () {
$('.icon-mobile-menu').on('click', function () {
$(this).toggleClass('menu-open');
$('.navigation').toggleClass('nav-slide');
});
});
})(jQuery);
.icon-mobile-menu {
background: red;
padding: 5px 10px;
cursor: pointer;
}
.menu-open {
background: blue;
color: white;
}
.navigation {
margin-top: 4px;
background: green;
padding: 5px 10px;
opacity: 0;
height: 0;
overflow: hidden;
-moz-transition:all 0.35s cubic-bezier(0.7, 0, 0.3, 1);
-o-transition: all 0.35s cubic-bezier(0.7, 0, 0.3, 1);
-webkit-transition: all 0.35s cubic-bezier(0.7, 0, 0.3, 1);
transition: all 0.35s cubic-bezier(0.7, 0, 0.3, 1);
}
.nav-slide{
height: 75px;
opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<header class="header">
<span class="icon-mobile-menu">menu</span>
</header>
<div class="navigation">
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>
</div>
相关文章:
- 拖动效果不会第二次显示
- 如何找出为什么ng-click()不会第二次触发
- JavaScript函数不可见?不会第二次被调用
- jQuery UI 对话框不会第二次打开,但无法访问后台
- 我的 HTML 按钮的 javascript 不会第二次切换
- .select()适用于第一次单击,而不是第二次单击
- 为什么不'第二次和第三次调用后,t ajax load()工作
- jQuery隐藏和显示不正确(多次)
- If/Else条件不运行第二次调用函数
- QuickPager Javascript工作为一次点击,但不是第二次点击
- 对于第一次使用ng-repeat而不是第二次使用ng-repeat创建的单选按钮,调用Ng-change事件
- HTML模态弹出动画不工作第二次
- Youtube iFrame(与javascript API)加载第一次,但不是第二次.为什么
- Jquery .load执行第一次加载,而不是第二次加载
- offsetHeight和offsetWidth在第一次onclick事件时计算错误,而不是第二次
- 如何测试方法是否只被调用了一次,而不是第二次在茉莉
- 我的对话框是第一次打开而不是第二次打开
- 为什么一个函数不接受第二次请求?
- JQuery动画在第一次点击时移动,而不是第二次点击
- 未捕获的TypeError:对象不是第二次调用时的函数