@ART4

Как получить атрибут выбранного option'а?

Имеется select:

<select name="variant" class="fn_variant variant_select {if $product->variants|count == 1}hidden{/if}" id="myselect">
                        {foreach $product->variants as $v}
                            <option for="{if $v->weight}{$v->weight}{/if}" value="{$v->id}" data-price="{$v->price|convert}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{/if}{if $v->sku} data-sku="{$v->sku|escape}"{/if}>{if $v->name}{$v->name|escape}{else}{$product->name|escape}{/if}</option>
                        {/foreach}
                    </select>

где в option есть атрибут for.
Есть JS код:

document.getElementById("myselect").addEventListener("change", function () {
        document.getElementById('mydiv').innerHTML = "Вес брутто*: " + this.value;
    });

Он берёт данные с 1 места и заменяет на другом месте. Только данные берёт не с for, а с value. Пробовал заменить this.value на this.for, так не подходит, куда копать?
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
Попробуйте так:
document.getElementById("myselect").addEventListener("change",
  function () {
    let opt;
    for(let i=0;i<this.children.length;i++){
      let child = this.children[i];
      if(this.value == child.value) {
        opt = child;
        break;
      }
    }
    if(!opt)return;
    let for_attr = opt.getAttribute("data-price") || "???";
    document.getElementById('mydiv').innerHTML = "Вес брутто*: "
        + for_attr;
  }
);
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
document.querySelector('#myselect').addEventListener('change', function(e) {
  const select = this;
  // или
  // const select = e.target;
  // const select = e.currentTarget;

  const [ option ] = select.selectedOptions;
  // или
  // const option = select[select.selectedIndex];
  // const option = select.querySelector(`[value="${select.value}"]`);
  // const option = select.querySelector('option:checked');
  // const option = [...select.children].find(n => n.selected);

  const forAttr = option.getAttribute('for');
  // или
  // const forAttr = option.attributes.for.value;

  document.querySelector('#mydiv').innerText = `Вес брутто*: ${forAttr}`;
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы