2016-05-11 25 views
1

我有點擊方法的異步$.post價值的返回值的問題。使用諾言成功點擊事件

我在我的網頁上有幾個句子,我想用ajax調用翻譯。我不想讓它變成異步,所以請不要提醒。當一個頁面加載時,會有4-5個或更多的句子,我希望它能夠「動態地」翻譯它們。

最後,我找到了一個解決方案,如何使用異步調用的返回值,但我猜想,因爲它是異步的,這就是爲什麼我的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是一個click事件,這是確定。那麼,有人可以幫我嗎?

回答

3

你可以扭轉你的邏輯和防止默認行爲的所有時間錨點擊需要的時候調用本地點擊DOM方法,e.g:

$('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來代替。

+0

工程很棒。謝謝。 – vaso123