使用promise成功点击事件

时间:2016-05-11 07:47:07

标签: jquery ajax asynchronous

我在点击方法上遇到异步$.post值的返回值时遇到问题。

我的网页上有几句话,我想用ajax调用翻译。我不想让它异步,所以请不要建议它。当一个页面加载时,会有4-5个或更多的句子,我希望它能够翻译它们并且#34;在飞行中#34;。

最后,我找到了一个解决方案,如何使用异步调用的返回值,但我猜,因为它是异步的,这就是为什么我的e.preventDefault()没有触发。

从这一点来说,我不知道,我怎么能解决它。

$.translate = function (string) {
    return $.post(getBaseUrl() + 'ajax.php', {action: 'translate', text: string}, function () {});
};

$('td.operations a.remove').click(function (e) {
    var promise = $.translate('Do you really want to hurt me?');
    promise.success(function(data){
        console.log(e);
        if (!confirm(data)) {
            e.preventDefault();
        }
    });
});

e是点击事件,没问题。那么,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

您可以反转逻辑并防止默认行为一直用于锚点击并在需要时调用本机点击DOM方法,例如:

$('td.operations a.remove').click(function (e) {
    e.preventDefault();
    var $self = $(this); // keep ref using closure (or you could bind it to promise callback)
    var promise = $.translate('Do you really want to hurt me?');
    promise.done(function(data){
        if (confirm(data)) {
            $self.off('click').get(0).click(); // call native click method
        }
    });
});

仅供参考,不推荐使用success延迟对象方法,而是使用done