Ich habe ein Problem mit einem Modal. Ich habe eine Schaltfläche auf einer Seite, die das Modal umschaltet. Wenn der Modal angezeigt wird, springt die Seite nach oben.
Ich habe alles getan, um eine Lösung/etc zu finden, aber ich bin wirklich verloren.
BEARBEITEN:
Ich habe auch versucht mit: $('#myModal').modal('show');
, aber es hat genau den gleichen Effekt.
Beim Öffnen des Modals wird eine modal-open
-Klasse auf das <body>
-Tag gesetzt. Diese Klasse setzt overflow: hidden;
für den Körper. Fügen Sie diese Regel zu Ihrem Stylesheet hinzu, um den Bootstrap.css-Stil zu überschreiben:
body.modal-open {
overflow: visible;
}
Jetzt sollte die Rolle an ihrem Platz bleiben.
Wenn Sie Modal mit Tag aufrufen. Versuchen Sie, '#' aus dem Attribut 'href' zu entfernen. Modal mit Datenattributen aufrufen.
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
$('the thing you click on').click(function ($e) {
$e.preventDefault();
});
Dies hilft Ihnen dabei, die Bildlaufleiste oben anzuhalten
wenn Sie das Ankertag als <a href"#" ..> ... </a>
verwenden und href="#"
ein Problem verursacht, entfernen Sie das . Sie können mehr über hier
Möglicherweise arbeiten Sie mit Modalen, die irgendwo im Code verschachtelt sind:
body.modal-open {
overflow: visible;
position: absolute;
width: 100%;
height:100%;
}
Für mich war es eine Kombination aus Position, Höhe und Überlauf.
Ich sehe keinen spezifischen Fehler, aber ich würde Ihnen raten, überprüfen Sie Ihre HTML-Syntax .
Ein kleiner Test mit Ihrer Quelle gibt mir Fehler
Zeile 127, Spalte 34: Nicht geschlossenes Element div.
<div class="inner onlySides">
Dies könnte ein Problem sein.
Ich habe versucht, dieses Problem auf meinem localhost zu replizieren. So seltsam es auch erscheinen mag, es gibt einen Konflikt mit der von Ihnen verwendeten Bootstrap-JS-Datei.
Versuchen Sie, Ihren Code zu kommentieren:
<script src="/min/?f=bootstrap.min.js,modernizr.js,bootstrap-datetimepicker.js,nprogress.js,feedback.js,select2.min.js,jquery.unveil.js,equalheights.jquery.js,hogan-v2.0.0.min.edu-custom.js,jquery.visible.min.js,handlebars-v1.2.0.js,typeahead.bundle.min.js,jquery.gridster.js,cookie.jquery.js,jquery.autosize.min.js,application.js&ver=1392814384"></script>
Verwenden Sie stattdessen Bootstrap 2.3.2:
<script src="//cdnjs.cloudflare.com/ajax/libs/Twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
Das hat für mich funktioniert.
Ich habe es mit Bootstrap Version 3 ausprobiert, aber das hat nicht funktioniert. Ich bin immer noch nicht in der Lage, das Problem herauszufinden, aber irgendwo entlang von Firebug warf ich einen e.preventDefault() is not a function
-Fehler.
Ich habe versucht, .modal oben in der Mitte des Bildschirms zu platzieren.
.modal {
position: absolute;
top: 50%;
}
Nur meine zwei Cent Gedanken.
sie haben zwei zusätzliche div
-Tags unmittelbar vor dem <div id="footer">
oder nach dem <div id="mainFrame" class="group">
div. Ich überprüfe dies mit Visual Studio 2012 Express.
Bitte entfernen Sie diese 2 zusätzlichen Divs und lassen Sie uns wissen, wie es funktioniert. Ich entfernte zusätzliche Divs und entfernte alle benutzerdefinierten Skripts. behielt nur Jquery-Kern und Bootstrap in der Fußzeile. Hier ist der Screenshot der endgültigen Ausgabe. hier ist der Jsbin-Spielplatz für dich, der gut funktioniert.
Ich empfehle Ihnen, headjs zu verwenden, um alle Skripts und CSS-Dateien zu laden. Es ist auch keine gute Praxis, Skripte zweimal zu laden.
body.modal-open {
overflow: visible !important;
}
Ich brauchte das wichtige Attribut, um es zu beheben
In Bootstrap 3.1.1 habe ich mit dieser Lösung gelöst:
body.modal-open {
position: absolute !important;
}
Versuchen Sie es damit, um Modal zu öffnen und sehen Sie, was passiert:
<a href="#generalModal" class="btn btn-primary btn-lg" data-toggle="modal">
Launch demo modal
</a>
body.modal-open {
position: inherit;
}
Das funktionierte für mich wie ein Zauber.
Ich hatte das gleiche Problem und ich glaube, ich finde es heraus. Sie müssen nur das modale HTML als direktes untergeordnetes Element des body-Tags einfügen ! Sie können den HTML-Code für die Schaltfläche platzieren, der das Modal zwar auslöst, wo Sie es benötigen. Ich glaube, das vermeidet CSS-Vererbungs- und Positionsprobleme, die dieses Problem auslösen.
Beispiel:
<body>
<!-- All your other HTML code -->
<div>
<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
</div>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</body>
Dieser hat es für mich getan
body.modal-open {
overflow: inherit;
padding-right: 0 !important;
}
Ich hatte das gleiche Problem mit Bootstrap 2.3.2
Es war ein Problem beim Klicken auf einen Link:
Der Trick war: return false;
<a href="#" class="btn" onclick="openPositionPopup(${positionReport[0]}); return false;">
<i class="icon-map-marker"></i>
</a>
und die js:
function openModal() {
$('#myModal').modal('show');
}
Schließlich habe ich herausgefunden, dass dies nicht der Fall ist.
Schlecht
<a href"#">
<button type="button" class="btn"
data-toggle="modal" data-target="#myModal">See Detail</button>
</a>
Gut
<button type="button" class="btn"
data-toggle="modal" data-target="#myModal">See Detail</button>
Ich habe alle obigen Beispiele ausprobiert - dies ist das einzige, was für mich funktioniert hat:
.modal-open {
padding-right: 0 !important;
}
Das Entfernen der Polsterung von der rechten Seite des Modells - verhindert den Sprung.
Nachdem ich Dutzende Antworten über mehrere Stunden gelesen hatte, kopierte ich den ursprünglichen Code erneut aus der Bootstrap-Datei und debugierte Schritt für Schritt, um zu sehen, warum ich immer nach oben springe. Die aktuellste Version von Bootstrap 3 zeigt den Modal an der Position, an der Sie sich gerade befinden. Ich hatte herausgefunden, dass -webkit-transform: translate3d(0,0,0);
und height: 100%
in meinem css-body-tag dieses Verhalten verursacht haben. Vielleicht hilft das jemandem.
Für mich funktioniert, wenn ich geändert die Version von 3.1.1 bis 3.3.7
Wenn Sie Version 3.3.1 nicht verwenden müssen, versuchen Sie es zu ersetzen.
Nach der Änderung ist es sinnvoll, check zu überprüfen, dass der Rest der Funktion ordnungsgemäß funktioniert.
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
Ich hatte das gleiche Problem. Das Problem war, dass ich HTML- und Body-Elementen eine .modal-open-Klasse hinzufügte. Fügen Sie einfach diese Klasse zu body hinzu und alles funktioniert wie erwartet.
höhe: 100% ist ein Problem, aber Sie müssen das richtige "div" hinzufügen
Ich habe das gleiche Problem und keine der Antworten hat mir geholfen. Ich habe einen Workaround gefunden, der dumm aussieht, aber zumindest in meinem Fall funktioniert.
Ich habe festgestellt, dass die Seite nur einmal nach oben gescrollt wird. Danach funktionieren die nächsten geöffneten Modale wie erwartet. Dann fand ich heraus, dass das Verstecken eines beliebigen Elements im DOM dieselbe seltsame Rolle auslöst. Ich habe also einfach ein Dummy-Div nach dem Laden der Seite erstellt, anstatt es zu verstecken und zu entfernen, und das Problem wurde gelöst.
var $dummy= $("<div>");
$("body").append($dummy);
$dummy.hide().remove();
Der einfachste Weg, den springenden Hintergrund zu lösen, besteht darin, zwei Parameter zu definieren:
body.modal-open {
overflow: visible;
padding-right: 0 !important;
}
Ich habe Stunden damit verbracht, alles hier und anderswo auszuprobieren. Es stellte sich heraus, dass ich für die Verwendung von "eckjs" -Material die Animation des Konfigurationsobjekts "uibModal.open" deaktivieren musste.
Zum Beispiel:
$uibModal.open(
{
animation: false,
component: 'myDialogComponent',
size: 'lg',
resolve: {
details: function() {
return detailsCollection;
}
}
}
);
Hoffe das hilft jemand anderem.