Anumik
@Anumik

Как передать атрибут data в jquery chosen?

Доброго времени суток!
Только недавно занимаюсь программированием, не могу разобраться как выполнить задачку
У меня при помощи jquery chosen формируется список, и для каждого элемента мне необходимо передавать data-link атрибут, может кто то сможет нубу подсказать как это сделать?

Код формирующий список
<div class="chosen-container">
<select class="my-chosen-select">
	<option></option>
	<?foreach($arResult["ITEMS"] as $arItem):?>
  <option data-link="<?=$arItem['PROPERTIES']['REG']['VALUE']?>" value="<?echo $arItem["NAME"]?>" ><span><?echo ($arItem["NAME"]." (".$arItem['PROPERTIES']['REG']['VALUE'].")");?></span></option>
	<?endforeach;?>
</select>
</div>


скрипт с настройками
$( document ).ready(function() {
	$(".my-chosen-select").chosen({
		placeholder_text_single: "Введите ваш город",
		no_results_text: "Извините, вашего города нет в списке",
		inherit_select_classes: true,
		search_contains: true
	});
});
  • Вопрос задан
  • 588 просмотров
Решения вопроса 1
Anumik
@Anumik Автор вопроса
2 варианта
1 в строке ~64 заменил option.innerHTML на html: option.outerHTML, таким образов в конечный передается не только текст из , но и сам с учетом всех атрибутов

2 Ищем метод SelectParser.prototype.add_option и внутри него первый вызов this.parsed.push({. Добавляем в объект, который "пушится" в массив, новый элемент. Назовем его, к примеру,
link:
link: option.getAttribute('data-link'),
На данном участке кода option - это ссылка на DOM-элемент очередного из нашего исходного селекта.

Получается примерно такой код:

SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
  if (option.nodeName.toUpperCase() === "OPTION") {
    if (option.text !== "") {
      if (group_position != null) {
        this.parsed[group_position].children += 1;
      }
      this.parsed.push({
        link: option.getAttribute('data-link'),
        array_index: this.parsed.length,
        options_index: this.options_index,
//...


Находим в файле строку (в моей версии это 264 строка)

option_el.setAttribute("data-option-array-index", option.array_index);


На этом участке кода создается конечный пункт списка . А наше значение из data-link у нас готово к использованию в переменной option.link.

Рядом с найденной добавляем строку

option_el.setAttribute("data-link", option.link);

1 решение моё, 2 подсказал Иван Пшеницын на ru.stackoverflow.com
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы