2017-05-02 78 views
4

考慮下面的代碼:jQuery的隱藏和顯示效果的功能到底看到

<div id="thediv" >hola</div> 
<button id="resharper">button</button> 

使用javascript/jQuery的:

$("button").on('click', function() { 
    $("#thediv").show(); 
    alert('click'); 
}); 

$(document).ready(function(){ 
    $("#thediv").hide(); 
}) 

我想要的行爲,首先顯示div標籤,然後顯示提醒「點擊」。相反,這種行爲以相反的方式起作用。警報文本首先顯示,然後按鈕可見。我錯過了什麼嗎?

我可以修改代碼以獲得所需的行爲,其中div首先顯示,然後警報文本閃爍。

+0

是否使用Ajax調用一樣嗎?而不是警惕,如果我有一個Ajax調用,是根本原因相同? – Harry

+0

如果你已經在AJAX調用中設置了'async:false',那麼它會是同樣的問題 - 但是你永遠不應該使用'async:false' –

回答

2

檢查中jQuery.show(options)允許您通過PlainObject選項。

而且你可以使用complete:一個元素上的動畫完成後調用的函數。

代碼:

$("button").on('click', function() { 
 
    $("#thediv").show({ 
 
     complete: function() { 
 
     alert('click'); 
 
     } 
 
    }); 
 
}); 
 

 
$(document).ready(function(){ 
 
    $("#thediv").hide(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="thediv" >hola</div> 
 
<button id="resharper">button</button> 
 
with javascript/jQuery:

0

這是因爲alert()阻止更新UI線程,而且線程還未來得及展現在DOM元素調用alert()之前。

理想情況下,您應該使用console.log()進行調試,但是您可以通過將alert()放在setTimeout()中以非常短的延遲來避免此問題。

$("button").on('click', function() { 
 
    $("#thediv").show(); 
 
    setTimeout(function() { 
 
     alert('click'); 
 
    }, 10); 
 
});
#thediv { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="thediv" >hola</div> 
 
<button id="resharper">button</button> 
 
with javascript/jQuery:

+0

這跟ajax調用一樣嗎?而不是警惕,如果我有一個Ajax調用,是根本原因相同? – Harry

+0

如果你在AJAX調用中設置了'async:false',那麼它會是同樣的問題 - 但你永遠不應該使用'async:false' –

+0

而不是'setTimeout()'更好地使用[jQuery.show(options)](http://api.jquery.com/show/#show-options) –

0

$("button").on('click', function() { 
 
    $("#thediv").show("slow", callback); 
 
}); 
 

 
$(document).ready(function() { 
 
    $("#thediv").hide(); 
 
}) 
 

 
function callback() { 
 
    alert('click'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="thediv">hola</div> 
 
<button id="resharper">button</button>

  1. 參數添加到.show()
+0

儘管這樣起作用,但邏輯​​稍有不同,因爲您現在正在爲展示設置動畫。 'show(0,callback)'會更接近 –