请考虑以下代码段。
function foo(event) {
var $item = $(event.target);
$item.addClass("className");
bar(event);
};
function bar(event) {
var $item = $(event.target);
// The following return false
if ($item.hasClass("className")) {
// flow of control does not enter
}
};
我不是问如何解决这个问题。这显而易见:将$item
的引用传递给bar
函数。
我在问jQuery:
是。立即。
DOM的属性/属性立即更新,您可以立即读取更改后的值。但UI呈现可能会延迟到JavaScript代码的末尾(UI呈现无关紧要)。
你不需要。
嗯......我认为DOM / ES标准可能包含这些内容。
你可以考虑设计的“正确行为”:谁能承受那些无法立即读取变化值的奇怪行为?一定是疯了。所以你的浏览器总能做正确的事情。 :d
function foo(event) {
var $item = $(event.target);
$item.addClass("className");
bar(event);
};
function bar(event) {
var $item = $(event.target);
if ($item.hasClass("className")) {
$("#output").text("className changed!")
}
};
$(function(){
$("#test").on("click", foo);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="test">click me</button>
<div id="output">hello</div>
你的代码应该按预期执行,它没有明显的问题,但是这可能会产生问题
当你执行addClass时,它会触发一个甚至更新class =''属性并删除你的className,这就是为什么这个条件
($item.hasClass("className"))
返回false