2011-12-26 192 views
1

我的下一個DIV:jQuery的延遲不工作

<div id="atack"> 
    <h1>Example</h1> 
    <h2>Example</h2> 
</div> 

的CSS是:

#ataque{ 
    -moz-border-radius: 10px; 
    border: solid thick; 
    display: none; 
    background: url('../images/check48.png') no-repeat 10px 10px; 
    background-color: #000000; 
    position: absolute; 
    width: 350px; 
    height: 100px; 
    top: 1cm ; 
    right: 1cm; 
    padding-top: 10px; 
} 

,並按下運行按鈕時,我想在5秒顯示一個消息,我嘗試使用jQuery,但沒有工作...

的其他代碼是:

<form method=GET> 
<input id="vm_action_btn" type=submit name=ataque value="Tipping Point" class="btn" /> 
<input type=hidden name=num_exec value=5 > 
</form> 

<script language="JavaScript"> 

$(function() {  
$("#vm_action_btn").bind('click', function() { 
     $('#atack').show().delay(5000).hide(); 
    }); 
}); 
</script> 

我沒有任何想法問題在哪裏!謝謝!

+0

您的意思是「但不起作用...」? – Fenec 2011-12-26 15:45:50

+0

這裏既沒有也沒有,但是你所包含的CSS針對的是一個ID爲「ataque」的元素,這個元素不會在你提供的任何其他代碼中使用。要麼是一個錯字,要麼應該從你的問題中刪除。 – 2011-12-26 16:29:45

+0

我犯了一個錯誤複製它。 CSS是好的。問題是GET方法,因爲它重新加載頁面,因此消息僅在加載時間內可見。 Thx – gekon 2011-12-27 10:36:19

回答

1

好吧,我擁有它。

問題是表單將數據發送到服務器端並重新加載頁面。請記住div「atack」在CSS顯示中:沒有,所以它被隱藏了。當我們顯示或淡入,並且想要延遲其他效果時,它只有在頁面加載(1秒?)之前纔可見。

我們可以解決這個問題是這樣的:

$(function() { 

$("#vm_action_btn").click(function() { 
    $.ajax({ 
    type: "POST", 
    url: "operations.php", 
    data: 'ataque=go', 
    success: function() { 
     $('#ataque').fadeIn(50).delay(3000).fadeOut(50); 
    } 
    }); 
    return false; 
    }); 
}); 

非常感謝您的幫助!

2

delay()僅適用於效果(fadeIn,fadeOut等)。它不適用於show()hide()。如果你願意的話,你總是可以快速地做出fadeOut(50)

從jQuery的文檔」

加入jQuery的1.4版本中,.delay()方法允許我們推遲 的跟在它後面的隊列功能的執行,它可以用來 用標準效果隊列或自定義隊列,只有隊列中的後續事件被延遲;例如,這不會延遲 延遲無參數形式的.show()或.hide(),它不使用 效果隊列。

+0

問題是get方法,因爲它重新加載頁面,所以消息只在加載時間內可見。如果我刪除表單,它可以正常工作。 Thx !! – gekon 2011-12-27 09:21:17

+0

那麼你是說在表單提交之前它工作,而不是之後?如果是這樣,只要將'bind'改爲'on'或'live'即可。 – john 2011-12-27 11:29:48

15

給予.hide()一個持續時間,它將被添加到默認queue(這是你推遲的那個)

// just add a 0-------------------v 
$('#atack').show().delay(5000).hide(0); 

這是因爲.delay()只延遲了一個隊列中的下一個項目,也是唯一的項目,jQuery的隊列自動爲動畫。

即使持續時間爲0,jQuery也會將其視爲動畫,並將hide方法添加到默認隊列中。

手動隊列函數,你傳遞一個函數給queue()方法。

$('#atack').show() 
      .delay(5000) 
      .queue(function() { 
       $(this).hide() 
         .dequeue(); 
      }); 
+0

它不工作......我認爲問題是GET方法重新加載頁面,所以消息只在html加載時間內可見... Thx! – gekon 2011-12-26 16:17:06

+0

@gekon:你想*重新加載頁面嗎?如果沒有,請將事件類型從'click'更改爲'submit',並添加'return false;'。 – 2011-12-26 16:35:09

+0

是的,因爲有PHP代碼,已經發送和使用它的數據... – gekon 2011-12-27 09:41:52