$(function () { const toggleIcon = (el, fromClass, toClass) => $(el).removeClass(fromClass).addClass(toClass); const ocultaTodos = () => { toggleIcon('.datalist .icono', 'ing-cancelar iconoAzul pointer', 'ing-buscar'); $('.datalist ul').hide(); }; $(document) .on('click', '.datalist-input,.icono', function () { const parent = $(this).parent(); $(".datalist ul:visible").not(parent.find('ul')).siblings('.datalist-input').trigger('click'); if (parent.find('ul').is(':visible') || parent.hasClass("disabled")) return ocultaTodos(); parent.find('ul, .datalist-input').show(); toggleIcon(parent.find('.icono'), 'ing-buscar', 'ing-cancelar iconoAzul pointer'); }) .on('click', '.datalist-select > ul li:not(.not-selectable)', function () { const parent = $(this).closest('.datalist'); parent.find('.datalist-input').text($(this).text().trim()); parent.find("input[type=hidden]").val($(this).data('id')); $('.datalist li').removeClass("selected"); $(this).addClass("selected"); parent.removeClass("datalist-invalid"); ocultaTodos(); }) .on('click', (e) => { if (!$(e.target).closest('.datalist').length) ocultaTodos(); }); $('.modal').on('hide.bs.modal', ocultaTodos); }); const setDatalist = (selector, value = -1) => { const parent = $(selector).closest('.datalist'); parent.find('ul li:not(.not-selectable)').each(function () { if ($(this).data("id") !== value) return; parent.find('.datalist-input').text($(this).text().trim()); $(selector).val(value); $('.datalist li').removeClass("selected"); $(this).addClass("selected"); $(this).click(); }); } const makeRequiredDatalist = (selector, required = true) => $(selector).closest('.datalist').toggleClass("required", required); //--------- function setDatalistFirst(selector) { var index = 1; var elementRoot = $(selector).parents('.datalist'); var num = elementRoot.find('ul li:not(.not-selectable)').length; if (index <= num) { while (elementRoot.find('ul li:nth-child(' + index + ')').hasClass("not-selectable") && index <= num) { index++; } var element = elementRoot.find('ul li:nth-child(' + index + ')'); elementRoot.find('.datalist-input').text(element.html().replace(/[\t\n]+/g, ' ').trim()); $(selector).val(element.data("id")); elementRoot.find("li").removeClass("selected"); element.addClass("selected"); } } function disableDatalist(selector, disabled = true) { var elementRoot = $(selector).parents('.datalist'); if (disabled) { elementRoot.addClass("disabled"); elementRoot.find('.icono').removeClass('ing-cancelar iconoAzul pointer').addClass('ing-buscar'); elementRoot.find('ul').hide(); } else elementRoot.removeClass("disabled"); } function invalidDatalist(selector, invalid = true) { var elementRoot = $(selector).parents('.datalist'); if (invalid) { elementRoot.addClass("datalist-invalid"); } else elementRoot.removeClass("datalist-invalid"); } //¿Se usa? function buscaDatalist(selector, valor) { selector.find('ul li').each(function () { var elem = $(this); if ($(this).parent().is('li')) elem = $(this).parent(); if (!$(this).html().toUpperCase().includes(valor.toUpperCase())) { $(elem).hide(); selector.find('.datalist-input').val(""); selector.find("input[type=hidden]").val(""); } else $(elem).show(); }); } function getDatalistText(selector, valor) { var elementRoot = $(selector).parents('.datalist'); var text = ""; $.each(elementRoot.find('ul li:not(.not-selectable)'), function () { if ($(this).data("id") == valor) { text = $(this).html(); } }); return text; }