jQuery Tooltip на Selectize

Я пытаюсь добавить всплывающую подсказку jQuery в поле выбора Selectize ( http://brianreavis.github.io/selectize.js/), однако по некоторым причинам у меня возникают некоторые проблемы.

Вот фрагмент моего кода:

$(function() {

  $("#myDropdown").selectize({
    onChange: function(value) {
      var ddOptions = {
        1: triggerOpt1,
        2: triggerOpt2,
        3: triggerOpt3,
        4: triggerOpt4
      };

      ddOptions[value]();
    },
    render: {
      option: showItem,
      item: showItem
    }
  });

  $("#myDropdown .ddOption").tooltip({
    position: "bottom left",
    offset: [-2, 10],
    opacity: 0.9
  });

});

function showItem(data) {
  return Handlebars.templates["dropdown"]({
    itemClass: data.value,
    label: data.text,
    title: I18n["ddOption_" + data.value]
  });
}
<select id="myDropdown">
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
  <option value="3">Option 3</option>
  <option value="4">Option 4</option>
</select>

По какой-то причине я не получаю подсказку jQuery, а подсказку собственного браузера. Когда я пытаюсь прикрепить всплывающую подсказку в консоли, она работает нормально..

Кто-нибудь когда-нибудь сталкивался с этой проблемой?

РЕДАКТИРОВАТЬ: класс ddOption добавляется к элементам выбора в шаблоне руля.

3 ответа

Я не знаю о Selectize, но могу понять, что он основан на selectmenu jQuery-ui, с которым я столкнулся с той же проблемой.

Основная причина заключается в том, что jquery-UI скрывает фактический элемент select и создает совершенно новый элемент с другим html, который имитирует его и синхронизирует его значение с оригинальным тегом select.

Итак, если вы захватываете его, например, по его идентификатору или классу, чтобы что-то сделать, вы в конечном итоге модифицируете скрытый элемент.

Вместо этого вы должны искать диапазон брата с помощью класса ui-selectmenu-button. Но лучше воспользуйтесь предпочитаемым инспектором браузера, чтобы увидеть его фактические атрибуты, используя плагин selectize.

ddOptions - это тип массива JS... вам нужен элемент html, чтобы получить подсказку... так что попробуйте следующий код... это может помочь вам...

$("#myDropdown option").tooltip({
    position: "bottom left",
    offset: [-2, 10],
    opacity: 0.9
  });

});

Я нашел частичное решение:

Применяется только в том случае, если сообщение всплывающей подсказки является общим или равно всем элементам, которые принимают плагин Selectize в представлении.

Используйте jQuery для ручной настройки параметров всплывающей подсказки:

$(".selectize-control").tooltip({
    placement: "top", // position
    title: "Your Message"
});

Я создал этот код. Надеюсь, это вам поможет.

Так я инициализировал свои данные для Selectize

$.ajax({
    type: 'GET',
    url : 'tableConfig',
    success : function(data) {
        $('#idTrans').each(function() {
            if (this.selectize) {
                let list = data.filter(x => x.codigo === "TRANS");
                for(let i = 0; i < list.length; i++){
                    this.selectize.addOption({value:list[i].idConfiguracion, text: list[i].valor, title: list[i].descripcion});
                }
            }
        });
    },
    error: function (request, status, error) {
        //alert("No se pudo realizar la operación por un error interno, contactese con el Administrador.");
    }
});

А затем я могу настроить всплывающую подсказку.

$('#idTrans').selectize({
    render: {
        option: function(data, escape) {
            let txtTitle = data.title;
            if(txtTitle === undefined || txtTitle === 'Ingrese Detalle:') txtTitle = '';

            return '<div class="option">' +
                '<div title="' + txtTitle + '">' + escape(data.text) + '</div>' +
                '</div>';
        },
        item: function(data, escape) {
            return '<div>'+ escape(data.text) + '</div>';
        }
    },
    onChange: function (value) {
        let tableConfig = $('#tableConfig').bootstrapTable('getData');
        let list = tableConfig.filter(x => x.idConfiguracion === parseInt(value));

        if (list.length > 0) {
            let idProTrans = list[0].nivel_padre;
            if (idProTrans !== null) {
                $("#idProceso_Trans").val(idProTrans);
            }
        }

    }
});

Свойство onChange. Возможно, вам это и не нужно и вы можете удалить эту часть, как видите, внутри свойства render. Я поставил "заголовок" для всплывающей подсказки

Наконец, выглядит вот так.

Другие вопросы по тегам