0

私はこのjqueryコードを書いています:

$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){$('#suc').hide('slow')},2500);
$('#suc').remove();

このように削除する$('#suc').remove();と:

$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){$('#suc').hide('slow')},2500);  

コードは正常に実行されますが、配置すると実行されません!!

それの何が問題なの?それは違法ですが、$('#suc').remove();ここでは?

4

4 に答える 4

1

を使用しているので、hideも安全に使用できます。delay

$('#suc').show(700).delay(2500).hide('slow', function () {
  $(this).remove();
});

十分であろう。

デモ: http://jsbin.com/isediz/2/


また、少し明確にするために、以下について:

コードは正常に実行されますが、配置すると実行されません!!

実際にはコードが実行されます (ある意味で)。問題はremove、2 つの非同期イベント (setTimeoutおよび.hide('slow')) を待機しないことです。そのため、これら 2 つが実行されるべきことを完了する前に実行されます。

于 2013-02-05T09:17:35.740 に答える
1

setTimeout呼び出しは、コードが続行される前にコールバックが実行されるのを待たないため、すぐに要素を削除します。コールバック内のコードが要素を非表示にしようとすると、そこにはありません。

メソッドcompleteのコールバックで要素を削除します。hide

setTimeout(function(){
  $('#suc').hide('slow', function(){
    $('#suc').remove();
  });
},2500);
于 2013-02-05T09:08:04.570 に答える
0

setTimoutsetTimout の直後のステートメントで既に削除した要素コールバックを使用しています。のコールバックは、setTimeout の次のステートメントまでにsetTimeoutid を持つ要素を削除するステートメントの後で実行されます。hide コールバックで削除して、削除後にスクリプトからアクセスされないようにします#suc#suc

$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){
      $('#suc').hide('slow', 
           function(){$(this).remove();
      }); 
},2500);
于 2013-02-05T09:06:22.030 に答える
0

関数のコールバックに andのremove()内部を配置する必要があります。setTimeouthide()

$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);

setTimeout(function() { 
    $('#suc').hide('slow', function() { $(this).remove(); })
}, 2500);
于 2013-02-05T09:07:57.927 に答える