Autor | Zpráva | ||
---|---|---|---|
VaKvas Profil |
#1 · Zasláno: 2. 12. 2015, 15:01:14
Zdravím a prosím o radu. Používám tento Autocomplete a problém je v tom, že pokud načtu form, kde je již vyplněná nějaká hodnota, tak mě to automaticky zobrazí nápovědu, byť jen s jednou volbou a to já nehcci...
Tedy jak zamezit tomu, že když mám naplněnou hodnotu, která sedí s tím co je v našeptávači, aby se buď automaticky skryl ? Vypadá divně, že se dobrazí form, s vyplnšnou hodnou a vyskočí našeptávač s jednou volbou.. Moc díky Tady je kód: (function ($) { $.widget("ui.combobox", { _create: function () { var input, that = this, wasOpen = false, select = this.element.hide(), selected = select.children(":selected"), defaultValue = selected.text() || "", wrapper = this.wrapper = $("<span>") .addClass("ui-combobox") .insertAfter(select); function removeIfInvalid(element) { var value = $(element).val(), matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(value) + "$", "i"), valid = false; select.children("option").each(function () { if ($(this).text().match(matcher)) { this.selected = valid = true; return false; } }); if (!valid) { // remove invalid value, as it didn't match anything $(element).val(defaultValue); select.val(defaultValue); input.data("ui-autocomplete").term = ""; } } input = $("<input placeholder = 'Napište alespoň 3 znaky'>") .appendTo(wrapper) .val(defaultValue) .attr("title", "") .addClass("form-control ui-state-default ui-combobox-input") .autocomplete({ delay: 200, minLength: 3, autoFocus: true, source: function (request, response) { var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); response(select.children("option").map(function () { var text = $(this).text(); if (this.value && (!request.term || matcher.test(text))) return { label: text.replace( new RegExp( "(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi" ), "<strong>$1</strong>"), value: text, option: this }; })); }, select: function (event, ui) { ui.item.option.selected = true; that._trigger("selected", event, { item: ui.item.option }); }, change: function (event, ui) { if (!ui.item) { removeIfInvalid(this); } } }) .addClass("ui-widget ui-widget-content ui-corner-left"); input.data("ui-autocomplete")._renderItem = function (ul, item) { return $("<li>") .append("<a>" + item.label + "</a>") .appendTo(ul); }; $("<a>") .attr("tabIndex", -1) .appendTo(wrapper) .button({ icons: { primary: "ui-icon-triangle-1-s" }, text: false }) .removeClass("ui-corner-all") .addClass("ui-corner-right ui-combobox-toggle") .mousedown(function () { wasOpen = input.autocomplete("widget").is(":visible"); }) .click(function () { input.focus(); // close if already visible if (wasOpen) { return; } // pass empty string as value to search for, displaying all results input.autocomplete("search", ""); }); }, _destroy: function () { this.wrapper.remove(); this.element.show(); } }); })(jQuery); |
||
VaKvas Profil |
#2 · Zasláno: 2. 12. 2015, 22:24:25
Tak to způsobuje Placeholder u toho inputu. Udělá zřejmě focus a vyskočí menu.
Má někdo nápad, jak to vyřešit? |
||
Časová prodleva: 5 dní
|
|||
Bez_názvu.jpg Profil * |
#3 · Zasláno: 7. 12. 2015, 15:30:58
Zdravim,
pravděpodobně zvýšíš šanci na vyřešení problému, když přidáš odkaz na živou ukázku (např. Živá ukázka). Tento autocomplete neznam, ale asi bude stačit přidat podmínku, že v inputu nesmí být hodnota, aby se vykreslil. Kam jí přidat, to ti neřeknu, protože se nedokážu zorientovat v tom, jak výše uvedený kód chová. S živou ukázkou by to šlo líp. |
||
Časová prodleva: 9 let
|
0