Как добавить поддельный выбор в динамический контент? - PullRequest
0 голосов
/ 18 октября 2019

Контекст

В Prestashop 1.7 существует продавец-помощник, который создает заказ бэк-офисом.

backoffice

В этой форме параметры доставки обновляются последобавление, удаление или изменение списка товаров для покупки. Клиентам необходимо добавить предопределенный элемент, выбранный с внутренним текстом: «Выберите опцию».

Это поток:

  1. Клиент добавляет товары в корзину
  2. Клиент выбирает вариант доставки
  3. Может повторить 1 и 2
  4. Затем нажмите Отправить заказ

В 1 и 2 список вариантов доставкиобновлено. Таким образом, я могу добавить фальшивый селектор, когда страница загружена, но когда вы выбираете продукт или вариант доставки, он исчезает.

Какой-то код

Я пытаюсь с наблюдателем мутаций,но когда вы выбираете параметры доставки, наблюдатель обнаруживает изменение DOM и повторно загружает атрибут selected = "".

function renewSelectDisabled() {
  if(delivery_option.lastElementChild) {
      if(delivery_option.lastElementChild.innerText != "-- Select an option --"){
      var node = document.createElement("OPTION");
      node.setAttribute("disabled", "");
      node.setAttribute("selected", "");
      node.setAttribute("value", "");
      var textnode = document.createTextNode("-- Seleccione una opción --");
      node.appendChild(textnode);
      document.getElementById("delivery_option").appendChild(node);
      return;  
    }
    else if(delivery_option.lastElementChild.innerText == "-- Seleccione una opción --"){
      return;
    }
    else {
      requestAnimationFrame(renewSelectDisabled);
    }
  }
  else {
    requestAnimationFrame(renewSelectDisabled);
  }
}

function addSelectDisabled(){
  let observer = new MutationObserver(callback);

  function callback (mutations) {
    requestAnimationFrame(renewSelectDisabled);
  }

  targetNode = document.getElementById('delivery_option')

  let observerOptions = {
    childList: true,
    attributes: false,
    characterData: false,
    subtree: false,
    attributeOldValue: false,
    characterDataOldValue: false
  };

  observer.observe(targetNode, observerOptions);
}

Что мне нужно?

Мне это нужно, когда клиентдобавляйте новые товары в корзину и не добавляйте их при выборе способа доставки.

<select name="delivery_option" id="delivery_option">
    <option value="87,">Delivery in 3 days</option>
    <option value="123,">Office Calbuco</option>
    <option value="107,">Office Curacautín</option>
    <option value="119,">Office Entre Lagos</option>
    <option value="116,">Office Futrono</option>
    <option value="117,">Office La Unión</option>
    <option value="110,">Office Lanco</option>
    <option value="121,">Office Llanquihue</option>
    <option value="109,">Office Loncoche</option>
    <option value="114,">Office Los Lagos</option>
    <option value="122,">Office Los Muermos</option>
    <option value="113,">Office Máfil</option>
    <option value="124,">Office Paillaco</option>
    <option value="111,">Office Panguipulli</option>
    <option value="108,">Office Pitrufquén</option>
    <option value="120,">Office Purranque</option>
    <option value="118,">Office Rio Bueno</option>
    <option value="112,">Office San José de La Mariquina</option>
    <option disabled="" select="" value="">-- Select an option --</option>
</select>

Спасибо, что прочитали меня, я надеюсь, что будет более ясным. Привет,

...