programing

부트스트랩 모달 문제 - 스크롤 사용 안 함

muds 2023. 8. 29. 21:00
반응형

부트스트랩 모달 문제 - 스크롤 사용 안 함

저는 모달을 가지고 있고, 그 모달 안에는 큰 숨겨진 콘텐츠를 표시하는 드롭다운이 있는데, 이것은 작동하고 있습니다.

이제 첫 번째 모달 위에 쌓인 다음 모달을 열고 해제하면 아래 모달에서 스크롤이 비활성화됩니다.

당면한 문제를 복제하기 위한 단계를 포함하여 전체 사례를 작성했습니다.여기서 보실 수 있습니다.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
    <title></title>
    <style>

    </style>
</head>
<body>


    <input type="button" data-toggle="modal" data-target="#modal_1" class="btn btn-lg btn-primary" value="Open Modal 1" >

    <div class="modal fade" id="modal_1">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                    <h4 class="modal-title">First Modal</h4>
                </div>
                <div class="modal-body">



                    <form class="form">

                        <div class="form-group">
                            <label>1) Open This First: </label>
                            <input type="button" data-toggle="modal" data-target="#modal_2" class="btn btn-primary" value="Open Modal 2" >
                        </div>

                        <div class="form-group">
                            <label>2) Change this once you have opened the modal above.</label>
                            <select id="change" class="form-control">
                                <option value="small">Show Small Content</option>
                                <option value="large">Show Large Content</option>
                            </select>
                        </div> 

                        <div id="large" class='content-div'>
                            <label>Large Textarea Content.. Try and scroll to the bottom..</label>
                            <textarea rows="30" class="form-control"></textarea>

                        </div>

                        <div id="small" class='content-div'>
                            <label> Example Text Box</label> 
                            <input type="text" class="form-control">
                        </div>  


                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>


    <div class="modal fade" id="modal_2">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                    <h4 class="modal-title">Second Modal</h4>
                </div>
                <div class="modal-body">

                    <hp>This is the stacked modal.. Close this modal, then chenge the dropdown menu, you cannot scroll... </h5>

                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>


</body>
<script src="http://code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js" type="text/javascript"></script>
<script>

    $(document).ready(function() {


        $(".content-div").hide();
        $("#change").change(function() {
            $(".content-div").hide();
            $("#" + $(this).val()).show();
        });


    });

</script>
</html>

다음은 실제 행동을 보여주는 Bootply입니다.

부트플라이

이것도 해결책입니다.

.modal {
  overflow-y:auto;
}

http://www.bootply.com/LZBqdq2jl5

자동은 정상적으로 작동합니다 :) 이것은 실제로 당신의 화면 크기보다 더 높은 모달을 수정할 것입니다.

모달이 입니다.modal-open<body>tag.페이지에서 까지는).tag. 부트스트랩은 한 페이지에서 여러 개의 모드를 지원하지 않습니다(적어도 BS3까지는).

작동하는 한 가지 방법은 다음을 사용하는 것입니다.hidden.bs.modal때, "Modal"을 다른 있는지 합니다.modal-open신체의 계급

// Hack to enable multiple modals by making sure the .modal-open class
// is set to the <body> when there is at least one modal open left
$('body').on('hidden.bs.modal', function () {
    if($('.modal.in').length > 0)
    {
        $('body').addClass('modal-open');
    }
});

당신을 위한 해결책을 찾았습니다.왜 작동하지 않는지는 잘 모르겠지만 당신의 CSS에 있는 라인 코드 하나만 있으면 문제가 해결됩니다.모달을 후 첫 모달은 두 번 모 을 닫 후 번 첫 모 달 은 째 은 달 째 모 은 ▁after ▁getting 달 , 번 ▁are 째 ▁second ▁the ▁modaloverflow-y:hidden어떻게든.로 설정되어 있더라도auto정말로.

당신은 이것을 다시 쓰고 CSS로 당신 자신의 선언을 설정해야 합니다.

#modal_1 {
    overflow-y:scroll;
}

여기 작업 데모가 있습니다.

편집: 잘못된 링크입니다. 죄송합니다.

$(document).ready(function () {

 $('.modal').on("hidden.bs.modal", function (e) { //fire on closing modal box
        if ($('.modal:visible').length) { // check whether parent modal is opend after child modal close
            $('body').addClass('modal-open'); // if open mean length is 1 then add a bootstrap css class to body of the page
        }
    });
});
//this code segment will activate parent modal dialog 
//after child modal box close then scroll problem will automatically fixed

부트스트랩 4를 위해 추가해야 했습니다!중요한

.modal {
    overflow-y: auto !important;
}

이렇게 하지 않으면 작동하지 않고 적용되지 않습니다.

screenshot

https://github.com/nakupanda/bootstrap3-dialog/issues/70 을 팔로우합니다.

.modal { overflow: auto !important; }

당신의 지지자들에게

부트스트랩이 동시에 여러 모달을 지원하지 않았습니다.그것은 부트스트랩 버그입니다.BS4에 대한 아래 스크립트를 추가하면 됩니다.

$('body').on('hidden.bs.modal', function () {
if($('.modal.show').length > 0)
{
    $('body').addClass('modal-open');
}
});
$('.modal').css('overflow-y', 'auto');

먼저, 부트스트랩에서는 여러 개의 개방형 모델이 지원되지 않습니다.참고 항목: 부트스트랩 모달 문서

여러 개의 열린 모델이 지원되지 않습니다.다른 모달이 계속 표시되는 동안 모달을 열지 마십시오.한 번에 둘 이상의 모달을 표시하려면 사용자 지정 코드가 필요합니다.

그러나 필요한 경우 기본 부트스트랩 스타일시트 다음에 포함되는 한 이 CSS 비트를 사용자 정의 스타일시트에 추가할 수 있습니다.

.modal {
    overflow-y:auto;
}

제거하여 문제를 해결했습니다.data-dismiss="modal" 가추를 합니다.

setTimeout(function(){ $('#myModal2').modal('show') }, 500);
$('#myModal1').modal('hide');

도움이 되길 바랍니다.

이것은 트위터 부트스트랩의 버그 때문인 것 같습니다.그것은 그것을 제거하는 것처럼 보입니다.modal-open두 개의 모델이 열려 있더라도 본문에서 클래스.의 jQuery에 대한 을 신을 수 .removeClass아직 열려 있는 모달이 있으면 기능하고 우회합니다(기본 기능에 대한 크레딧은 다음 답변으로 이동합니다: https://stackoverflow.com/a/1950199/854246) .

(function(){
    var originalRemoveClassMethod = jQuery.fn.removeClass;

    jQuery.fn.removeClass = function(){
        if (arguments[0] === 'modal-open' && jQuery('.modal.in').length > 1) {
            return this;
        }
        var result = originalRemoveClassMethod.apply( this, arguments );
        return result;
    }
})();

이 코드는 내 코드를 해결했습니다. 두 번째 팝업이 닫혔을 때 첫 번째 팝업은 더 이상 스크롤할 수 없습니다.

$('body').on('hidden.bs.modal', '#SecondModal', function (e) {
  if ($('#FirstModal').is(':visible')) { // check if first modal open 
    $('body').addClass('modal-open'); // re-add class 'modal-open' to the body because it was removed when we close the second modal
    $('#FirstModal').focus(); // Focus first modal to activate scrollbar
  }
});

일종의 해킹이지만, 저는 이상한/불필요한 행동을 없애기 위해 모달에 가깝게 그것을 닫았다가 다시 열고 싶습니다.페이드를 해제한 경우 페이드가 닫혔다가 다시 열리는 것을 볼 수 없습니다.

var $ModalThatWasOnTop= $('#ModalThatWasOnTop')

$ModalThatWasOnTop.on('hidden.bs.modal', function(e) {
     console.log('closing  modal that was on top of the other modal')
     $('#ModalThatWasCovered').modal('hide');
     $('#ModalThatWasCovered').modal('show');

});

당신이 열려고 하는 구성 요소 코드를 모달에 넣는 것은 저에게 효과가 있습니다.한번 보세요.

 host: {
    '[style.display]': '"flex"',
    '[style.flex-direction]': '"column"',
    '[style.overflow]': '"auto"'
  }

쉬워요

.modal { overflow-y: auto !important; }

부트스트랩 5에서 이 문제를 발견했습니다.부트스트랩 5가 jQuery에서 멀어지기 때문에 여러 모달을 열고 신체 요소 스크롤이 비활성화될 때 해결책이 있습니다.이벤트는 https://getbootstrap.com/docs/5.0/components/modal/ #http://; 에서 확인할 수 있습니다.

 document.querySelector('body').addEventListener('hidden.bs.modal', (event) => {
    // remove the overflow: hidden and padding-right: 15px
    document.querySelector('body').removeAttribute('style');
 });

한 모달에서 다른 모달을 여는 경우 다음을 사용할 수 있습니다.

$('#myModal').on('hidden.bs.modal', function () {
    // Load up a new modal...   
    $('#myModalNew').modal('show') 
})

JQuery를 통해 'modal-open' 클래스를 본문에 추가합니다.저는 그 두루마리가 모달을 제외한 모든 것에 효과가 있다고 생각합니다.

이전 응답에 대한 설명으로, 오버플로 속성을 (CSS를 통해) 모달에 추가하는 것이 도움이 되지만, 그러면 페이지에 두 개의 스크롤 막대가 있습니다.

이것도 해결책입니다.

.modal.fade .modal-dialog{
   -webkit-transform: inherit;
}

저는 실제로 이것에 대한 해결책을 생각해냈습니다.사용 중인 경우 실제로 페이지 본문에 대해 스크롤을 활성화해야 합니다.$('#myModal').hide();모델을 숨깁니다. 뒤에 다음 줄을 .$('#myModal').hide();:

$('body').attr("style", "overflow:auto")

이렇게 하면 스크롤이 다시 활성화됩니다.

부트스트랩 3 또는 4를 사용하는 경우 HTML 본문에 클래스 모달오픈이 있는지 확인합니다.이것이 필수인지는 잘 모르겠지만, 모달 백드롭의 z 인덱스가 지워졌는지 확인하십시오.

    $('.your-second-modal').on('hidden.bs.modal', function (e) {
        $('.your-second-modal').css('z-index', "");
        $('.modal-backdrop').css('z-index', 1040);
        $('body').addClass("modal-open");
    });

아래에 Js 코드를 추가합니다.

    $(document).on("click",".modal",function () {
       if(!$("body").hasClass('modal-open'))
           $("body").addClass('modal-open');
    });

de modal-body 컨테이너를 사용하고 있는지 확인하십시오. 이것이 제가 가지고 있던 문제였습니다.

<div class="modal-body">
    ...
</div>

부트스트랩 모달

style.scss의 Angular +2 환경의 경우 다음 클래스를 사용합니다. 마법처럼 작동합니다.

  .cdk-overlay-container .cdk-global-overlay-wrapper {
    pointer-events: auto !important;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;  }

이 CSS 코드를 추가하면 됩니다.

.modal.fade.in {
        transform: translateZ(0);
        -webkit-transform: translateZ(0);
    }

모달, 첫 모달, 첫 번째 모달을 닫은에 이렇게 됩니다.id="modal_1" 특성: CSS 성실:overflowY:auto.

당신은 그것을 복구해야 합니다. 그러면 그것은 작동할 것입니다.예를 들어 코드 예제에서 단순 추가:

$(document).on('hidden.bs.modal', '#modal_2',function () {
       $('#modal_1').css('overflowY','auto')
});

부트스트랩 모달을 사용하는 경우 이 대신 tabindex="-1"을 제거해야 하는 것보다 간단합니다.

**Paste**

언급URL : https://stackoverflow.com/questions/28077066/bootstrap-modal-issue-scrolling-gets-disabled

반응형