Bootstrap Modals在closures之后不断添加填充
你可以从这个video检查错误。
我试图把这个代码放在我的javascript:
$('.modal').on('hide.bs.modal', function (e) { $("element.style").css("padding-right","0"); });
但它不起作用。 有谁知道如何解决这个问题? 你可以在这里看到这个网站。
用户名和密码:admin / Koodaus1
我的代码:
<button type="button" class="btn btn-lg btn-default" data-toggle="modal" data-target="#loginModal">Admin panel</button> <div id="loginModal" class="modal fade" role="dialog"> <div class="modal-dialog modal-sm"> <!-- Modal content --> <div class="modal-content"> <!-- header --> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">Login</h4> </div> <!-- body --> <div class="modal-body text-center" > <input class='form-control' type="text" id="userName" placeholder="Username" ng-model='username'> <input class='form-control' type="password" id="password" placeholder="Password" ng-model='password'> <div class="modal-footer"> <button type="button" class="btn btn-default" id="loginButton" ng-click="goToAdminPanel()">Login</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button> </div> </div> </div> </div> </div> <div id="adminPanel" class="modal fade" role="dialog"> <div class="modal-dialog modal-lg"> <!-- Modal content --> <div class="modal-content"> <!-- header --> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">Admin Panel</h4> </div> <!-- body --> <div class="modal-body" > </div> <div class="modal-footer"> <button type="button" class="btn btn-default" id="saveButton">Save</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button> </div> </div> </div> </div>
$scope.goToAdminPanel = function(){ Parse.User.logIn($scope.username,$scope.password,{ success: function(user){ $('#loginModal').modal('hide'); $('#adminPanel').modal(); }, error: function(user, error) { alert('Wrong username and/or password'); } }); }
这可能是Bootstrap模式的一个小故障。 从我的testing,似乎问题是#adminPanel
正在初始化,而#loginModal
尚未完全closures。 解决方法是通过删除#adminPanel
和#loginModal
上的fade
类或在调用$('#adminPanel').modal();
之前设置超时( #loginModal
来移除animation$('#adminPanel').modal();
。 希望这可以帮助。
我刚刚使用了下面的CSS修复,它正在为我工作
body { padding-right: 0 !important }
只要添加一个这样的风格:
.modal-open { padding-right: 0px !important; }
如果你更关心padding-right
相关的东西,那么你可以做到这一点
jQuery :
$('#loginModal').on('show.bs.modal', function (e) { $('body').addClass('test'); });
这会将类添加到你的body
,然后使用这个
CSS :
.test[style] { padding-right:0 !important; }
这将帮助你摆脱padding-right
。
但是,如果你也关心隐藏的scroll
那么你也必须添加这个:
CSS :
.test.modal-open { overflow: auto; }
这是JSFiddle
请看看,它会为你做的伎俩。
只需打开bootstrap.min.css
find这一行(默认).modal-open {overflow:hidden;}
并将其更改为.modal-open {overflow:auto; padding-right:0!important;}
它将适用于网站的每个模式。 你可以做溢出:auto; 如果你想保持滚动条,因为它是打开模式对话框。
我有很长的一段时间同样的问题。 没有任何答案在这里工作! 但下面修好了!
$(document.body).on('hide.bs.modal,hidden.bs.modal', function () { $('body').css('padding-right','0'); });
有两个事件在closures模式时触发,首先是hide.bs.modal
,然后是hidden.bs.modal
。 这不是一个可怕的修复! 非常stream畅! 你甚至都看不到填充权。
你可能不需要两个。 但是我很沮丧,我决定用锤子而不是手术刀。
我刚刚删除了fade
类,并使用animation.css
更改了类淡入淡出效果。 我希望这将有所帮助。
只需从button中删除data-target
,并使用jQuery加载模式。
<button id='myBtn' data-toggle='modal'>open modal</button>
jQuery的:
$("#myBtn").modal('show');
容易修复
添加这个类
.modal-open { overflow: hidden; padding-right: 0 !important; }
它的重写,但工程
我知道这是一个古老的问题,但没有一个来自这里的答案在类似的情况下解决了这个问题,我认为这对于一些开发人员来说也是有用的。
我使用添加一些CSS的身体当打开一个模式,在它仍然使用的网站引导3。
body.modal-open{ padding-right: 0!important; overflow-y:scroll; position: fixed; }
我的解决scheme不需要任何额外的CSS。
正如@欧兰指出的那样,另外一个事件还在发生。 我的解决scheme是只有当第一个事件完成(隐藏adminPanel
模式)时才开始第二个事件(显示loginModal
模式)。
您可以通过将侦听器附加到loginModal
模式的hidden.bs.modal
事件来完成此操作,如下所示:
$('#loginModal').on('hidden.bs.modal', function (event) { $('#adminPanel').modal('show'); }
而且,如有必要,只需隐藏loginModal
模式即可。
$('#loginModal').modal('hide');
你可以在监听器中实现自己的逻辑,以决定是否显示adminPanel
模式。
你可以在这里获得更多关于Bootstrap Modal Events的信息 。
祝你好运。
removeAttr将无法工作,您将删除像这样的CSS属性:
$('.modal').on('hide.bs.modal', function (e) { e.stopPropagation(); $('body').css('padding-right',''); });
没有财产价值的财产被删除。
body.modal-open{ padding-right: 0 !important; }
我深入到bootstrap JavaScript中,发现Modal代码在一个名为adjustDialog()
的函数中设置了正确的填充,这个函数在Modal原型上定义并在jQuery上公开。 把下面的代码放在某个地方来覆盖这个函数,对我来说什么都没有做(尽pipe我不知道没有设置它的结果是什么!!)
$.fn.modal.Constructor.prototype.adjustDialog = function () { };
这可以解决这个问题
.shop-modal.modal.fade.in { padding-right: 0px !important; }
我有与Bootstrap 3.3.7相同的问题,我的解决scheme为固定的导航栏:将此样式添加到您的自定义CSS。
.modal-open { padding-right: 0px !important; overflow-y: scroll; }
它会让你的模式显示,而滚动窗口仍然工作。 谢谢,希望这也能帮助你
body { padding-right: 0 !important; overflow-y: scroll!important; }
为我工作。 请注意滚动条强制在身体 – 但如果你有一个“滚动”页面无论如何,没关系(?)
$('.modal').on('hide.bs.modal,hidden.bs.modal', function () { setTimeout(function(){ $('body').css('padding-right',0); },1000); });
尝试这个
它将在模式closures之后将正确的填充0px添加到主体。
(Bootstrap v3.3.7)从我的浏览器检查器,我看到这是直接设置在元素样式属性,巫婆覆盖类属性。
当模式显示时,我尝试“重置” paddig-right值:
$("#myModal").on('shown.bs.modal', function(){ $(this).css({paddingRight:""}); });
但是一旦窗口resize就会返回:(可能来自插件脚本)。
这个解决scheme为我工作:
var modal_needfix=true; $("#myModal").on('shown.bs.modal', function(){ var modalscope=$(this); modalscope.css({paddingRight:""}); if(modal_needfix){ window.addEventListener("resize",function(){ requestAnimationFrame(function(){// be sure to act after the pluggin script modalscope.css({paddingRight:""}); }); }); modal_needfix=false; } });
正如@欧兰兰说,如果你正在使用一些像淡出效果那么我们需要等待显示模式之前,这是有点hacky,但会做的伎俩。
function defer(fn, time) { return function () { var args = arguments, context = this; setTimeout(function () { fn.apply(context, args); }, time); }; } $.fn.modal.Constructor.prototype.show = defer($.fn.modal.Constructor.prototype.show, 350);
我已经尝试了很多东西,但为我工作的小东西。
body { font-size: 12px; font-family: brownFont; padding-right: 0 !important ; }
这是一个引导错误,并在v4-dev中修复: https : //github.com/twbs/bootstrap/pull/18441,直到然后添加CSS类以下应该帮助。
.fixed-padding { padding-right: 0px !important; }
我有同样的问题,使用模态和Ajax。 这是因为JS文件被引用了两次,第一页和ajax所调用的页面都是这样,所以当模式被closures的时候,它会调用JS事件两次,默认情况下会增加一个17px的内存。
如果身体溢出,Bootstrap模型会将填充权添加到身体。
在引导3.3.6(我使用的版本)这是负责添加填充右侧的正文元素的function: https : //github.com/twbs/bootstrap/blob/v3.3.6/dist/js /bootstrap.js#L1180
快速的解决方法是在调用bootstrap.js文件之后简单地覆盖该函数:
$.fn.modal.Constructor.prototype.setScrollbar = function () { };
这为我解决了这个问题。
我希望还有人需要这个答案。 在bootstrap.js中有一个叫做resetScrollbar()的函数,由于一些愚蠢的原因,开发人员决定将滚动条的尺寸添加到body的填充权限。 所以在技术上,如果你只是设置右填充空string,它将解决这个问题
这应该解决这个问题
body { padding: 0 !important }
设置绝对位置到身体:
body { position: absolute; }
所以填充不会影响身体。