Смена артикула в одностраничном оформлении

В файле ../wa-apps/shop/js/frontend/order/product.js при смене артикула есть такие строки:

// Change SKU
that.$skus.on("change", ".js-sku-field", function() {
    var $input = $(this),
        is_disabled = $input.data("disabled"),
        is_active = ($input.attr("checked") === "checked");

    if (is_active) {
        var sku_id = $input.val(),
            sku = that.skus[sku_id];

        that.changeSKU(sku, !is_disabled);
    }
});

Вопрос у меня к строке:

is_active = ($input.attr("checked") === "checked");

Зачем она нужна? Проверка на checked имела бы смысл, если бы у нас были чекбоксы. Но у нас радио-кнопки в выборе артикула. То есть если ивент сработал, то $(this) уже выделен. Другого быть не может. Ведь у нас onChange, а не onClick(хотя и он помоему не сработает на disabled).

И может и было бы плевать, но $input.attr("checked") возвращает true в моём случае. То есть смена артикула в корзине у меня не работает никак, ибо условие не выполняется.


А вот почему она у меня возвращает true - хороший вопрос. Понятия не имею. Я думал дело в версии jQuery. Подключил не просто ту же версию, а тот же конкретный файл из другой темы, где у меня проблем нет. Не помогло. Если верить jQ-документации, то до версии 1.6 он возвращает boolean, после уже "checked". Хотя у меня вроде 1.11. Костылями конечно можно решить проблему. И я так и сделаю. Но всё же не вижу смысла вызывать такую потребность в костыле. Если по какой-то причине(?) и нужно делать проверку, то лучше более приспособленным для этого способом .is(":checked").

2 ответа

  • 2
    Anton F 14 сентября 2022 08:31 #
    А вот почему она у меня возвращает true - хороший вопрос.

    возможно у тебя не <code class="hljs">checked="checked" </code>, в 3.* возвращает "checked" при <code class="hljs">checked="checked", checked=""</code> и <code class="hljs">checked</code>

    Хотя у меня вроде 1.11.

    Вебасист завис в развитии на 2012 году :)

    Зачем она нужна?

    потому что обработчик висит на that.$skus, а не на конкретном поле

    • +1
      Евгений Леман Евгений Леман 14 сентября 2022 17:00 #
      возможно у тебя не checked="checked"

      Это одностраничное оформление. Там всей разметкой ВА управляет. В том то и суть, что HTML + JS этот полностью от ВА и ты не можешь ничего изменить.

      потому что обработчик висит на that.$skus, а не на конкретном поле

      Не важно на чём висит. Главное $(this). А им всегда будет та радио-кнопка, на которую и произошла смена.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите