JQuery onChange использует значения до изменения (значения после изменения необходимы) - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над модулем, который должен выбрать единственно возможное значение поля выбора Multi- или Single, если доступно только одно допустимое значение и пустое.

Пока все работает нормально До тех пор, пока я не использую ACL для отключения выбора значений. Например, я получил одно поле выбора с 3-мя возможными значениями. Затем я отключаю 2 из них (ACL - если выбрана специальная очередь), поэтому остается только одно значение (+ пустое). Мой модуль сначала не выберет последнее значение, но когда я изменю что-либо еще на той же странице (второй вызов onchange), он выберет последнее возможное значение.

Первое условие if проверяет, имеет ли поле только одно возможное значение в этом. Когда я записываю массив 'Change', он всегда получает отключенные значения, которые все еще там, даже когда 'change', который вызывал всю функцию, был ACL, отключающим эти значения.

Я все еще новичок в javascript и Я еще не нашел решение.

Буду очень признателен за любую помощь.

$('.TableLike').on("change", function () {
        var Change = [];
        $('.Row').each( function() {
            $(this).children().next().children().next().children().each( function(index) {
                Change[index] = $(this).text()
            } )
            if ( (!Change[2] || /.*Field needed.*/i.test(Change[2])) && Change[0] === "-") {
                SoleOption = Change[1];
                $(this).children().next().children().next().children().each(function() {
                    if ($(this).text() === "-") {
                        $(this).removeAttr("selected");
                    }
                    if ($(this).text() === SoleOption) {
                        $(this).attr("selected", "selected");
                    }
                } )
                $(this).children().next().children().children().children().val(SoleOption)

            }
            SoleOption = "";
            Change = [];
        } )
    } )

1 Ответ

0 голосов
/ 13 февраля 2020

Мне удалось исправить проблему с помощью метода setTimeout (). Таким образом, DOM обновился до того, как ACL внес изменения. Я открыл метод setTimeout после метода onChange и вставил весь код, который должен запускаться после изменения, в метод setTimeout.

Надеюсь, это будет полезно для других в будущем.

...