Как получить html select> значение пользовательского атрибута option tag с помощью jquery?

#html #jquery

#HTML #jquery

Вопрос:

У меня есть исследование, что в html вы можете добавить пользовательский атрибут, просто добавив data-* атрибут внутри тега html. Я заполняю свой select > option тег из своей базы данных:

 <td>
  <select onchange='setattr(this)' id='pitemnamerow"  cnt  "' class='pitemname select2bs4 tselect'>
    <option selected='selected'></option>
  </select>
</td>
 

Мой Jquery и уже установил мой пользовательский тег

 for (i in data.branditms) {
      $('#pitemname' brndid.id).append($('<option>', {
      value: data.branditms[i]['item_id'],
      text: data.branditms[i]['item_name'],
      data-um: data.branditms[i]['um'], //custom-tag
}));
 

Результат DOM:

 <select onchange="setattr(this)" id="pitemnamerow1" class="select2bs4 pitemname tselect select2-hidden-accessible" data-select2-id="pitemnamerow1" tabindex="-1" aria-hidden="true">    
   <option selected="selected" data-select2-id="81"></option>
   <option value="0-RKM51" data-um="PC/s" data-select2-id="84">0-RING 2"DIAMETER</option>
   <option value="UYD983" data-um="M" data-select2-id="84">Parts Wheel</option>
</select>
 

теперь, когда я пытаюсь получить доступ к значению пользовательского атрибута, он говорит undefine:

 function setattr(brnditem){
    var test = $(this).find('.pitemname').data('um');
    console.log(test);  
}
 

PS: Мои table row и select > options также являются динамическими.

Есть идеи?

Комментарии:

1. У вас нет никакого атрибута с данными имени. какое значение вы ожидаете получить?

2. я добавил его динамически в свой jquery.

3. можете ли вы сделать скриншот своих html тегов в режиме проверки и прикрепить его к вопросу, потому что я не вижу добавленного имени атрибута data

4. Я обновил свой вопрос.

5. Я опубликовал ответ @jzoler проверьте это

Ответ №1:

Попробуйте проверить это:

       var test = $(brnditem).find('option:selected').data('um');
 

также убедитесь, что функция была определена прямо перед ее вызовом в теге ‘select’

Комментарии:

1. все еще не определено: (

Ответ №2:

data() Вместо этого вы должны вызвать attr() , переписать свой код следующим образом :

 function setattr(brnditem)
{
  var test = $(brnditem).find("option:selected").data('um');
  console.log(test);  
}
 

Комментарии:

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

2. Я думаю, вы должны использовать brnditem in setattr() вместо this

3. $(brnditem).find(‘.pitemname’).data(‘um’); все еще не определено.

4. как вы вызываете setattr() и что вы передаете в качестве параметра?

5. onchange=’setattr(this)’ я включил это в свой вопрос.