Twitter 부트 스트랩을 사용하여 자동으로 경고를 닫는 방법


90

나는 트위터의 부트 스트랩 CSS 프레임 워크 (환상적이다)를 사용하고있다. 사용자에게 보내는 일부 메시지의 경우 Javascript JS 및 CSS 경고를 사용하여 표시하고 있습니다.

관심있는 사람들은 여기에서 찾을 수 있습니다 : http://getbootstrap.com/javascript/#alerts

내 문제는 이것입니다. 사용자에게 경고를 표시 한 후 일정 시간 간격이 지나면 사라지기를 원합니다. 트위터의 문서와 내가 살펴본 코드에 따르면 이것이 구워지지 않은 것처럼 보입니다.

  • 내 첫 번째 질문은 이것이 실제로 Bootstrap에 구워지지 않았는지 확인하는 요청입니다.
  • 둘째,이 동작을 어떻게 달성 할 수 있습니까?

여기를보세요 stackoverflow.com/questions/23101966/... 즉 내가 찾은 최고의 대답
안드레스

답변:


108

부름 window.setTimeout(function, delay)을 통해이 작업을 수행 할 수 있습니다. 다음은 경고가 표시된 후 2 초 (또는 2000 밀리 초) 후에 자동으로 경고를 닫는 예입니다.

$(".alert-message").alert();
window.setTimeout(function() { $(".alert-message").alert('close'); }, 2000);

멋진 기능으로 감싸고 싶다면 이렇게 할 수 있습니다.

function createAutoClosingAlert(selector, delay) {
   var alert = $(selector).alert();
   window.setTimeout(function() { alert.alert('close') }, delay);
}

그러면 이렇게 사용할 수 있습니다 ...

createAutoClosingAlert(".alert-message", 2000);

나는 이것을 달성하는 더 우아한 방법이 있다고 확신합니다.


제시 감사합니다! setTimeout이 작동하고 유효한 솔루션으로 선택하겠습니다. 그러나 실제로 TK Kocheran이 언급하고 기록한대로 동작이 구워 져야합니다.
Mario Zigliotto 2011 년

트위터 부트 스트랩 코드를 살펴 보았지만 자동 종료 알림에 대한 지원이 보이지 않았습니다.
jessegavin 2011 년

예-TK의 응답을 기다리고 있습니다. 왜냐하면 그의 메시지에서 자동 닫기 기능이 있어야하는 것처럼 들리지만 그렇지 않은 것처럼 들리지만 github의 버그 보고서는 이에 대해 언급하지 않습니다.
Mario Zigliotto 2011 년

예, 그들은 경고를 자동으로 닫을 수 있다고 주장하지 않으며 제공된 jQuery 플러그인을 사용하여 프로그래밍 방식으로 경고를 닫을 수 있습니다. 즉 $('#myAlert').alert('close'), 광고 된대로 작동하지 않습니다.
Naftuli Kay

jQuery를 확장하고 다음과 같이 객체에서 해당 메서드를 디스패치 할 수 있습니다 $('#my_fancy_alert').createAutoClosingAlert(2000). 당신은 통과해야 $(this).remove()또는 $(this).alert('close')에서 setTimeout콜백.
aL3xa

99

alert. ( 'close')에서도 작동하도록 만들 수 없습니다.

그러나 나는 이것을 사용하고 있으며 치료 효과가 있습니다! 경고는 5 초 후에 사라지고 사라지면 그 아래의 콘텐츠가 자연스러운 위치로 올라갑니다.

window.setTimeout(function() {
    $(".alert-message").fadeTo(500, 0).slideUp(500, function(){
        $(this).remove(); 
    });
}, 5000);

확실히 훌륭한 솔루션입니다. 경고는 짧은 간격 후에 정말 멋지게 사라집니다. 매우 전문적으로 보입니다.
Matt Setter

실제로 빠르고 훌륭하게 작동합니다.
Mohamed Anis Dahmani

1
경고가 표시 될 때마다 호출해야합니까? 아니면 클래스가있는 모든 경고에 대해 자동으로 작동 .alert-message합니까? 문제가 발생하면 BS3 경고의 클래스가입니다 alert alert-danger alert-block..alert , alert-danger또는 타임 아웃 기능의 전체 클래스 이름은?
raffian 2014.01.25

@raffian 다음 $(".alert-message,.alert-danger,.alert-info")과 같이 넣으십시오 . 전체 웹 사이트에서 원하는지 여부를 파악해야합니다. 예를 들어 모든 페이지에서 원하는 경우 Laravel의 블레이드에서 @include ( 'scripts-alerts') 또는 @yield ( 'alerts')와 같은 것을 사용할 수 있습니다. 여기가 아닌 stackoverflow에서 특정 질문을 파악하거나 질문해야합니다 ...
Pathros

1
이를 수행하는 가장 좋은 방법입니다. 다른 요소는 천천히 올라가고 즉시 위치를 변경하지 않기 때문에 @Mario Zigliotto 정답으로 표시되어야합니다. 훨씬 더 아름답고 전문적으로 보입니다.
Torsten Barthel

4

팝업 경고를 처리하고 페이드 할 때 이와 동일한 문제가 발생했습니다. 나는 여러 곳을 둘러 보았고 이것이 나의 해결책이라는 것을 알았다. 'in'클래스를 추가하고 제거하면 문제가 해결되었습니다.

window.setTimeout(function() { // hide alert message
    $("#alert_message").removeClass('in'); 

}, 5000);

.remove () 및 유사하게 .alert ( 'close') 솔루션을 사용할 때 문서에서 경고가 제거되는 문제가 발생한 것처럼 보였으므로 동일한 경고 div를 다시 사용하고 싶다면 할 수 없었습니다. 이 솔루션은 페이지를 새로 고치지 않고도 경고를 다시 사용할 수 있음을 의미합니다. (저는 aJax를 사용하여 양식을 제출하고 사용자에게 피드백을 제공했습니다)

    $('#Some_Button_Or_Event_Here').click(function () { // Show alert message
        $('#alert_message').addClass('in'); 
    });

3

경고에 대한 '닫기'작업을 사용하면 DOM에서 경고가 제거되고 경고가 여러 번 필요하기 때문에 작동하지 않습니다 (Ajax로 데이터를 게시하고 모든 게시물에서 사용자에게 메시지를 표시합니다). . 그래서 필요할 때마다 경고를 생성 한 다음 타이머를 시작하여 생성 된 경고를 닫는이 함수를 만들었습니다. 경고를 추가 할 컨테이너의 ID, 경고 유형 ( '성공', '위험'등) 및 메시지를 함수에 전달합니다. 내 코드는 다음과 같습니다.

function showAlert(containerId, alertType, message) {
    $("#" + containerId).append('<div class="alert alert-' + alertType + '" id="alert' + containerId + '">' + message + '</div>');
    $("#alert" + containerId).alert();
    window.setTimeout(function () { $("#alert" + containerId).alert('close'); }, 2000);
}

2

이것은 coffescript 버전입니다.

setTimeout ->
 $(".alert-dismissable").fadeTo(500, 0).slideUp(500, -> $(this.remove()))
,5000

2

위의 각 솔루션에서 경고의 재사용 가능성을 계속 잃었습니다. 내 솔루션은 다음과 같습니다.

페이지로드시

$("#success-alert").hide();

경고를 표시해야하는 경우

 $("#success-alert").show();
 window.setTimeout(function () {
     $("#success-alert").slideUp(500, function () {
          $("#success-alert").hide();
      });
 }, 5000);

fadeTo는 불투명도를 0으로 설정하므로 디스플레이가 없음이었고 불투명도가 0이어서 솔루션에서 제거했습니다.


0

여기에 다른 스레드에서 몇 가지 답변을 살펴본 후 다음과 같이 끝났습니다.

showAlert()선택 사항 type및을 사용하여 경고를 동적으로 추가하는 이름의 함수를 만들었습니다 closeDealy. 예를 들어 danger5 초 후에 자동으로 닫히는 경고 유형 (예 : Bootstrap의 경고 위험)을 다음과 같이 추가 할 수 있습니다.

showAlert("Warning message", "danger", 5000);

이를 위해 다음 Javascript 함수를 추가하십시오.

function showAlert(message, type, closeDelay) {

    if ($("#alerts-container").length == 0) {
        // alerts-container does not exist, add it
        $("body")
            .append( $('<div id="alerts-container" style="position: fixed;
                width: 50%; left: 25%; top: 10%;">') );
    }

    // default to alert-info; other options include success, warning, danger
    type = type || "info";    

    // create the alert div
    var alert = $('<div class="alert alert-' + type + ' fade in">')
        .append(
            $('<button type="button" class="close" data-dismiss="alert">')
            .append("&times;")
        )
        .append(message);

    // add the alert div to top of alerts-container, use append() to add to bottom
    $("#alerts-container").prepend(alert);

    // if closeDelay was passed - set a timeout to close the alert
    if (closeDelay)
        window.setTimeout(function() { alert.alert("close") }, closeDelay);     
}

0

언젠가 무언가를 숨기는 매우 간단한 솔루션이 필요했고 이것이 작동하도록 관리했습니다.

각도에서 다음을 수행 할 수 있습니다.

$timeout(self.hideError,2000);

다음은 시간 초과에 도달했을 때 호출하는 함수입니다.

 self.hideError = function(){
   self.HasError = false;
   self.ErrorMessage = '';
};

이제 내 대화 상자 / UI는 해당 속성을 사용하여 요소를 숨길 수 있습니다.


0

지연 및 페이드 :

setTimeout(function(){
    $(".alert").each(function(index){
        $(this).delay(200*index).fadeTo(1500,0).slideUp(500,function(){
            $(this).remove();
        });
    });
},2000);

0

이거 한번 해봐

$(function () {

 setTimeout(function () {
            if ($(".alert").is(":visible")){
                 //you may add animate.css class for fancy fadeout
                $(".alert").fadeOut("fast");
            }

        }, 3000)

});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.