Wie kann ich das Browser-Ansichtsfenster an den oberen Rand der Seite bewegen, wenn der Benutzer auf eine jQueryUI-Optionsschaltfläche klickt?

7

Ich habe einige Radio-Buttons eingerichtet wie folgt:

%Vor%

Das mache ich zu jQueryUI-Buttons wie folgt:

%Vor%

Dies ist der resultierende HTML:

%Vor%

Die Schaltflächen funktionieren, aber wenn ich auf einen klicke, wird der Browser-Ansichts-Port an den Anfang der Seite zurückgegeben, genauso wie es passiert, wenn Sie auf einen <a href="#">link</a> -Link klicken.

Ich verwende jQuery 1.4.2 und jQueryUI 1.8.7. Wie kann ich dieses Verhalten verhindern? Danke fürs Lesen.

EDIT: Der <a href="#">link</a> -Teil fehlte.

    
ben 13.12.2010, 01:58
quelle

11 Antworten

25

Ich bin kürzlich auf dieses Problem gestoßen und habe tatsächlich eine Lösung gefunden, die Ihnen in Abhängigkeit von Ihrem CSS helfen kann.

Grundsätzlich, wenn Sie Ihre Radioknöpfe von der Seite mit etwas wie verstecken:

%Vor%

Oder etwas ähnliches ist das top : -10000px ; , das das Problem ist.

Das heißt, wenn der Radioknopf durch den Label-Klick zwangsläufig fokussiert wird, versucht die Seite, ihn durch Scrollen des Browser-Viewports in den Radiobutton in Sicht zu bringen. Da der minimale scrollTop-Wert für den Browser 0 ist, scrollt er nach oben.

Wenn Sie nur die Regel top : -10000px ; entfernen, wird das Problem behoben.

Hoffe, das hilft.

ps. Der Grund, warum preventDefault und stopPropagation in dieser Instanz nicht funktionieren, wie in anderen Kommentaren erwähnt, ist, dass sie das Standardverhalten des Browsers nicht anhalten, um das Formularfeld zu fokussieren, wenn auf das Label geklickt wird.

    
christos constandinou 11.01.2011 09:04
quelle
5

Ich habe versucht, das Problem neu zu erstellen, aber es ist fehlgeschlagen. Ich habe das in FireFox 3.6.13, Google Chrome 8.0 und Internet Explorer 8 überprüft.

Können Sie weitere Einzelheiten angeben, um das Problem neu zu erstellen, oder eine Test-HTML-Seite sein?

Haben Sie ein Klickereignis für die Optionsfelder? Wenn Sie einen auf Ihrem Ereignishandler haben, können Sie die Verbreitung des Ereignisses stoppen und es einmal versuchen.

%Vor%

Aber welcher Code auch immer hier gegeben wird, deutet nichts an, was zu diesem Verhalten führen könnte. Wenn Sie eine Testseite haben, aktualisieren Sie bitte den Beitrag mit diesem.

    
Arun P Johny 18.12.2010 08:14
quelle
3

Verwenden Sie anstelle von href="#" href="# add" oder einen anderen relevanten Text. Dies wird den Sprung an den Anfang der Seite lösen.

    
MartinM 28.11.2012 12:11
quelle
2

Das Problem ist, dass wenn Sie auf die Beschriftung des Optionsfelds klicken, die Schaltfläche automatisch den Fokus erhält. Verwenden Sie keine Positionseigenschaften wie top:-100000000px und left:-100000000px .

Ich denke, Sie müssen nur Visibility Eigenschaft des Eingabetextes auf Versteckt setzen.

%Vor%     
Ata Iravani 13.05.2015 12:52
quelle
1

sieht so aus, als müssten Sie mit einem Klick umgehen und setzen Sie return false; am Ende des Handlers. Oder es kann besser sein, das Sprudeln des Ereignisses zu verhindern, indem Sie Folgendes verwenden:

%Vor%

wobei ev - ein Ereignisobjekt ist

    
Genius 18.12.2010 08:57
quelle
1

Der folgende Click-Handler würde dies verhindern

%Vor%     
Khaja Minhajuddin 18.12.2010 09:13
quelle
1

Ich hatte das gleiche Problem

Nur-FF-Schnellkorrektur (bezogen auf Ihren Code) wäre

%Vor%

Lösung für FF und IE

Der Täter war eine CSS-Regel im Hauptstil:

%Vor%

, die im Konflikt mit jQueryUI .ui-helper-hidden-accessible class

steht

Ich musste diese Regel spezifischer machen und sie nur auf die "echten" Formulare beschränken, die für die Datenübermittlung verwendet werden.

%Vor%     
O N 13.12.2011 12:34
quelle
0

Ich habe Fälle gefunden, in denen die Verwendung der leeren Ankerverknüpfung href="#" solche Ansichtsfenstersprünge verursachen würde (besonders wenn sie in einem iframe in chrome verwendet werden). Versuchen Sie, es durch href="javascript: void (0)"

zu ersetzen     
Liorb 23.12.2010 20:41
quelle
0

Dies ist nicht das Verhalten der Benutzeroberfläche von jquery, wie es in Ссылка

zu sehen ist

Es ist am wahrscheinlichsten , ein anderer Code, den Sie diesen Schaltflächen hinzufügen.

Was passiert, wenn Sie auf diese Optionsfelder klicken? Sie verstecken oder laden Inhalt oder etwas anderes?

Wenn Sie an diese Optionsfelder einen anderen Handler anschließen, zeigen Sie diesen Code bitte an, da dies sehr wohl der Täter sein könnte.

    
Gaby aka G. Petrioli 24.12.2010 17:44
quelle
0

Verwenden Sie

ähnlich wie Christos, um das Stylesheet zu überschreiben

top: auto;

Gefunden in einem Wordpress-Fehlerbericht: Ссылка Die Idee ist, dass sowohl "links" als auch "oben" gesetzt werden "zu großen Negativen sollte nicht notwendig sein.

Hinweis für die Kommentatoren, die den Click-Handler oder die href: jquery-ui behandeln, legen die Handler für ihre Zwecke fest, also würde ich sie lieber nicht ändern und dann Accessibility, Tastaturnav usw. testen. Die Style Override-Lösung scheint harmlos zu sein .

[Bearbeiten 2014/02/03] Wordpress hat das in Version 3.8.1 (oder früher) behoben. Dieser Fix ist ein bisschen cool, negative Positionierung begone! Es wird durch clip: rect(0 0 0 0); border: 0; ersetzt, was offensichtlich der jquery-ui Weg ist. Siehe Ссылка

Dieses Ding ist immer noch absolut positioniert, also sollte es in Ordnung sein, in meine oder Christos Lösung zu gehen.

    
kitchin 16.04.2013 16:52
quelle
0

Die Lösung für mich bestand darin, "position: relative" auf

zu setzen

input[type='radio'].ui-helper-hidden-accessible

Edit: Firefox funktioniert nicht ... die Radio Buttons werden sichtbar

    
Yann 25.07.2014 17:51
quelle

Tags und Links