Jquery 函数未在 'tap' 函数事件内部执行

标签 jquery jquery-ui jquery-selectors

这是我写的函数

$('#move').bind('tap', function () {
    $('.page').addClass('slideLeftOut', function () {
    $('#wrapper').css("height","300");
    }); 
}); 

我的问题是,我需要在 addClass 之后将 #wrapper 的高度更改为 300..

我认为这是正确的语法,但它不会改变 addClass 函数之后的高度。

有什么建议吗?

编辑:

这是一个 JSfiddle: http://jsfiddle.net/TSM_mac/A8T9f/

最佳答案

普通的 jQuery addClass 方法不采用回调函数。在操作完成之前它不会返回,因此您可以安全地将代码放在以下行中:

$('#move').bind('tap', function () {
    $('.page').addClass('slideLeftOut');
    $('#wrapper').css("height","300");
});
<小时/>

但是,由于您使用的是 jQuery UI,这有点棘手。 The jQuery UI extension to addClass不提供回调参数。

由于 UI addClass 方法使用 animate在内部,您可以使用 jQuery 1.6 $.Deferred 增强功能,它允许您在元素上的所有动画完成时调用函数。这很容易通过 promise 实现:

$('#move').bind('tap', function () {
    $('.page').addClass('slideLeftOut').promise().done(function() {;
        $('#wrapper').css("height","300");
    });
});

参见:

请注意,只有当所有动画完成时才会运行,而不仅仅是addClass动画完成。

<小时/>

如果您使用浏览器的 native 动画功能,我不认为有任何简单的方法可以找出动画何时完成。您需要使用 setTimeout 在指定的时间段后运行代码。

See jsFiddle :

$('.page').addClass('slideLeftOut');

setTimeout(function() {
    $('#wrapper').css("height","300");
}, 500);

关于Jquery 函数未在 'tap' 函数事件内部执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246534/

相关文章:

javascript - 为什么 jquery 选择器返回一个数组而不是元素本身?

jQuery:在表单内选择第一个子输入,但在类型:隐藏时不选择?

javascript - 获取具有值的系列中最后一个输入字段的索引

asp.net-mvc - 通过 JQuery 将多个参数从 View 传递到 Controller 的最佳方法

javascript - 仅当鼠标位于使用 jQuery UI 的特定元素上时才允许拖动

javascript - jquery ui - 未定义不是对话框上的函数

javascript - Javascript 循环中使用最后一个参数的 jQuery 单击绑定(bind)函数

javascript - jQuery:在单击时隐藏与选择器具有相同文本的对象的父级

css - jQuery UI 奇怪的冗余 CSS 选择器?

javascript - 可以:not selector be used with 'this' ?