Почему значение логического значения изменяется после выхода из функции? - PullRequest
0 голосов
/ 08 февраля 2012

После того, как я щелкну на элементе li, где атрибут class содержит «disabled selected», 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");
    }

Ответы [ 5 ]

4 голосов
/ 08 февраля 2012

Вы должны переместить оба оператора 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 голос
/ 08 февраля 2012

Обратный вызов не вызывается до тех пор, пока не будет нажата кнопка «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");
    }
});
1 голос
/ 08 февраля 2012

Последние два, если тесты выполняются до обработчика события click, поэтому значение disabled тогда еще не изменилось.

0 голосов
/ 08 февраля 2012

Проблема двоякая.

Во-первых, как отмечают несколько авторов, вам нужно поместить эти if тесты в обработчик кликов.В настоящее время они выполняются за пределами области действия обработчика кликов, что, как я подозреваю, не в том случае, если вы хотите, чтобы они выполнялись.

Во-вторых, 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");
    }
});
0 голосов
/ 08 февраля 2012

Функция выполняется при нажатии на элемент li.При первоначальной оценке сценария событие click не было запущено.

...