#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
insetattr()
вместоthis
3. $(brnditem).find(‘.pitemname’).data(‘um’); все еще не определено.
4. как вы вызываете
setattr()
и что вы передаете в качестве параметра?5. onchange=’setattr(this)’ я включил это в свой вопрос.