Breite der automatischen Vervollständigung der jQuery-Benutzeroberfläche nicht richtig eingestellt
Lesezeit: 6 Minuten
Ich habe ein jQuery-UI-Autocomplete-Feld implementiert, und anstatt die Breite des Textfelds zu sein, werden die Dropdown-Optionen erweitert, um die verbleibende Breite der Seite auszufüllen.
Schauen Sie sich dieses Beispiel an, um sich selbst davon zu überzeugen: http://jsbin.com/ojoxa4
Ich habe versucht, die Breite der Liste unmittelbar nach dem Erstellen wie folgt festzulegen:
Ich habe auch versucht, die Breite mithilfe von Stilen auf der Seite festzulegen:
ui-autocomplete { width: 500px; }
Das funktioniert erstaunlicherweise, aber es würde bedeuten, dass alle Autovervollständigungen auf einer Seite die gleiche Breite haben müssten, was nicht ideal ist.
Gibt es eine Möglichkeit, die Breite jedes Menüs einzeln festzulegen? Oder besser, kann mir jemand erklären, warum die Breiten bei mir nicht richtig funktionieren?
Die Antwort von @hmoyat weiter unten sollte die akzeptierte Antwort sein.
– Kosta Kontos
11. April 2018 um 10:20 Uhr
Arnaud Leymet
ich benutze das Drop-in-Lösung:
jQuery.ui.autocomplete.prototype._resizeMenu = function () {
var ul = this.menu.element;
ul.outerWidth(this.element.outerWidth());
}
Das ist im Grunde die Lösung von @madcapnmckay, aber das muss die ursprüngliche Quelle nicht ändern.
Dies sollte die akzeptierte Lösung sein – da es am einfachsten und unaufdringlichsten ist
– nach oben
24. Juli 2015 um 20:11 Uhr
Ich denke, es ist die beste Antwort, weil es für alle jquery Autocomplete-Deklarationen gilt, und es ist klar!
– Cristiam Mercado
3. Dezember 2015 um 14:38 Uhr
keine Ahnung, was genau dieser Code tut – aber er passt die Autocomplete-Breite “magisch” an die Breite des betreffenden Eingabefelds an; genau so, wie es ursprünglich funktionieren sollte, aber unter vielen Umständen nicht funktioniert.
– niedrige_mieten
19. Juli 2016 um 7:23 Uhr
Hey, danke für diese Antwort. Können Sie etwas mehr Einblick in die genaue Funktionsweise des Codes geben, damit ich herausfinden kann, was die optimale Platzierung dafür ist? Überschreibt es die _resizeMenu Funktion? Ich habe es in ein Skript eingefügt, das einmal auf jeder Seite meiner Webanwendung ausgeführt wird. Haben Sie Vorschläge für eine bessere Platzierung? Vielen Dank.
– sieuv
30. März 2017 um 10:15 Uhr
element.autocomplete('instance')._resizeMenu ist besser, da Sie nur die Instanz überschreiben können. Anstatt für andere automatische Vervollständigungen auf derselben Seite zu überschreiben.
– Lomax
30. November 2020 um 15:51 Uhr
Es stellt sich heraus, dass das Problem darin besteht, dass das Menü erweitert wird, um die Breite seines übergeordneten Elements auszufüllen, das standardmäßig der Hauptteil ist. Dies kann korrigiert werden, indem man ihm ein enthaltendes Element mit der richtigen Breite gibt.
Die absolute Positionierung ermöglicht mir die Platzierung <div> unmittelbar nach der Eingabe, ohne den Belegfluss zu unterbrechen.
Wenn ich dann die automatische Vervollständigung aufrufe, gebe ich an an appendTo Argument in den Optionen, wodurch das Menü an my angehängt wird <div>und erben somit seine Breite:
Dies behebt das Problem. Es würde mich jedoch immer noch interessieren, warum dies erforderlich ist, anstatt dass das Plug-In ordnungsgemäß funktioniert.
Ich habe genau das gleiche Problem. Wenn ich mir die Beispiele auf der Jquery-UI-Site ansehe und versuche, sie zu replizieren, kann ich nicht sehen, was ich anders mache. Liegt es an mir oder ist die “neue” offizielle Autovervollständigung schlechter als Jorns alte?
– madcapnmckay
9. Mai 2011 um 1:49 Uhr
Ich würde empfehlen, die Option appendTo zu verwenden, auch wenn die Breite kein Problem darstellt. Dadurch können Sie das Widget mit verschiedenen Stilen und Optionen wiederverwenden und nicht alle am unteren Rand Ihres Dokuments schweben lassen.
– Daniel DelCore
15. Dezember 2015 um 4:24 Uhr
Tut mir leid, ich habe das abgelehnt, Arnauds Antwort ist einfach so viel besser.
– David Grenier
29. Februar 2016 um 21:25 Uhr
@DavidGrenier Ich glaube nicht, dass Sie eine Antwort ablehnen, weil eine andere Antwort besser ist und fair ist. Es sei denn, Sie haben einen bestimmten Grund, warum diese Antwort nicht nützlich ist. Ich denke, es ist besser, Ihre Präferenz für die andere Frage zu zeigen, indem Sie sie abstimmen, aber ich bin sicher, dass Sie das bereits getan haben 🙂 stackoverflow.com/help/privileges/vote-down
– Biruk Abebe
18. Dezember 2017 um 22:15 Uhr
Dies ist die beste Lösung
– Gaurav Chavan
11. Februar 2020 um 12:32 Uhr
obomaye
Ich weiß, dass dies schon lange beantwortet wurde, aber ich denke, es gibt eine bessere Lösung
Schöne Lösung, zur Beachtung, es akzeptiert Eingabeargumente, also lesen Sie das Handbuch vor der Verwendung – zum Beispiel, wenn Sie die Funktion schreiben, wenn NICHT EINE automatische Vervollständigung auf einer Seite steht.
– Benutzer1954544
20. Februar 2016 um 20:11 Uhr
Dies sollte das Standardverhalten sein
– BugliL
26. August 2021 um 9:36 Uhr
madcapnmckay
Ich habe mich im Autocomplete-Code umgesehen und der Schuldige ist dieser kleine Mistkerl
_resizeMenu: function() {
var ul = this.menu.element;
ul.outerWidth( Math.max(
ul.width( "" ).outerWidth(),
this.element.outerWidth()
) );
},
Ich bin mir nicht sicher, was ul.width(“”) tun soll, aber ui.width(“”).outWidth() gibt immer die Breite des Körpers zurück, weil das ul daran angehängt wird. Daher wird die Breite nie auf die Elementbreite gesetzt….
Wie auch immer. Um dies zu beheben, fügen Sie dies einfach zu Ihrem Code hinzu
$element.data("autocomplete")._resizeMenu = function () {
var ul = this.menu.element;
ul.outerWidth(this.element.outerWidth());
}
Ist das ein Fehler?
EDIT: Falls jemand einen reduzierten Testfall für den Fehler sehen möchte hier es ist.
Ich weiß, dass dies vor langer Zeit beantwortet wurde, aber ich bin auf dasselbe Problem gestoßen. Meine Lösung bestand darin, position:absolute hinzuzufügen
Zur Verdeutlichung für andere: .ui-autocomplete { position: absolute; }
– ynkr
3. August 2012 um 19:23 Uhr
Das hat bei mir total funktioniert. Buchstäblich in a gehackt !important und bingo bango, glücklicher chef. #dontVoteTrump #actuallyMakeAmericaGreatAgain
– Der Dembinski
27. Juli 2016 um 22:10 Uhr
Diese Antwort sollte viel mehr Stimmen haben. Einige andere Antworten scheinen mir ziemlich hackige Lösungen zu sein.
Zur Verdeutlichung für andere: .ui-autocomplete { position: absolute; }
– ynkr
3. August 2012 um 19:23 Uhr
Das hat bei mir total funktioniert. Buchstäblich in a gehackt !important und bingo bango, glücklicher chef. #dontVoteTrump #actuallyMakeAmericaGreatAgain
– Der Dembinski
27. Juli 2016 um 22:10 Uhr
Diese Antwort sollte viel mehr Stimmen haben. Einige andere Antworten scheinen mir ziemlich hackige Lösungen zu sein.
– Brise
5. Februar 2020 um 10:29 Uhr
Dies ist die beste Antwort.
– Vibhor Dube
31. Mai um 14:13 Uhr
Nik Olsen
Ich bin auch auf dieses Problem gestoßen, habe aber festgestellt, dass ich einfach vergessen habe, einen Verweis auf das Stylesheet jquery.ui.autocomplete.css einzufügen. Haben Sie dieses Stylesheet in Ihr Layout/Ihre Musterseite aufgenommen?
Das war das Problem für mich – und ich vermute, es war für die meisten Menschen auch. Glaubt ihr alle, dass jQ UI standardmäßig so kaputt ist? 😉
– veraltet
13. November 2013 um 15:41 Uhr
Oder fügen Sie Ihrem CSS Folgendes hinzu, da dies alles in dieser Datei enthalten ist: .ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; }
– Christoph Fink
19. April 2014 um 17:07 Uhr
Einige haben es vielleicht vergessen, aber einige sind tatsächlich auf den Fehler / das Problem gestoßen, der in anderen Antworten erklärt wurde
– userfuser
4. Juni 2015 um 14:53 Uhr
13041300cookie-checkBreite der automatischen Vervollständigung der jQuery-Benutzeroberfläche nicht richtig eingestelltyes
Die Antwort von @hmoyat weiter unten sollte die akzeptierte Antwort sein.
– Kosta Kontos
11. April 2018 um 10:20 Uhr