2016-05-11 13 views
1

クリックメソッドで非同期$.post値の戻り値に問題があります。クリックでイベントに約束を使用

私のWebページにはいくつかの文章があります。私は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はクリックイベントです。問題ありません。それで誰も私を助けてくれるの?

答えて

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 
     } 
    }); 
}); 

FYI、繰延オブジェクトのsuccess方法が推奨されません、代わりにdoneを使用しています。

+0

素晴らしいです。ありがとうございました。 – vaso123

関連する問題