在我点击class-attribute包含“disabled selected”的li元素后,disabled获取值“true”,但在执行该函数后,调用最后一个if语句。
var disabled = false;
$("li").click(function () {
if ($(this).attr("class") == "disabled selected") {
disabled = true;
}
});
if (disabled) {
alert("disabled is true");
}
if (!disabled) {
alert("disabled is false");
}
答案 0 :(得分:4)
您应该在点击处理程序中移动if
个语句。
var disabled = false;
$("li").click(function () {
if ($(this).attr("class") == "disabled selected") {
disabled = true;
}
if (disabled) {
alert("disabled is true");
}
else {
alert("disabled is false");
}
});
答案 1 :(得分:1)
如果测试在click事件处理程序之前运行,则最后两个,因此disabled
的值尚未更改。
答案 2 :(得分:1)
在单击“li”之前不会调用回调。但是,前面两个'if'语句会立即执行。您需要将它们放在回调中。
var disabled = false;
$("li").click(function () {
if ($(this).attr("class") == "disabled selected") {
disabled = true;
}
if (disabled) {
alert("disabled is true");
}
if (!disabled) {
alert("disabled is false");
}
});
答案 3 :(得分:0)
单击li
元素时执行该功能。最初评估脚本时,尚未触发单击事件。
答案 4 :(得分:0)
问题是双重的。
首先,正如几张海报所指出的,您需要将这些if
测试放在点击处理程序中。就像现在一样,它们在click处理程序的作用域之外执行,我怀疑它不是你希望它们执行的时候。
其次,if ($(this).attr("class") == "disabled selected") {
只会在类字符串为'disabled selected'
时为您提供“真实”值。如果类字符串为'selected disabled'
(或'otherClass disabled selected'
或'disabled selected draggable'
等),那么您将获得因比较而返回的false
值。
尝试:
$("li").click(function () {
var i = $(this); //Multiple variables used for better step-line debugging.
var hasDisabled = i.hasClass('disabled');
var hasSelected = i.hasClass('selected');
var disabled = false;
if (hasDisabled && hasSelected) {
disabled = true;
}
if (disabled) {
alert("disabled is true");
}
if (!disabled) {
alert("disabled is false");
}
});