2017-05-02 18 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)'会更接近 –