jQuery를 사용하여 간단한 팝업을 생성하는 방법


217

웹 페이지를 디자인하고 있습니다. mail이라는 div의 내용을 클릭하면 레이블 전자 메일 및 텍스트 상자가 포함 된 팝업 창을 표시하려면 어떻게해야합니까?


1
답변 은 기존 HTML 또는 CSS를 건드리지 않고 빠른 알림에 매우 유용하다는 것을 알았습니다 . js의 jQuery를 사용하여 div를 만들고 표시합니다.
mabi

답변:


241

먼저 CSS-원하는대로 조정하십시오.

a.selected {
  background-color:#1F75CC;
  color:white;
  z-index:100;
}

.messagepop {
  background-color:#FFFFFF;
  border:1px solid #999999;
  cursor:default;
  display:none;
  margin-top: 15px;
  position:absolute;
  text-align:left;
  width:394px;
  z-index:50;
  padding: 25px 25px 20px;
}

label {
  display: block;
  margin-bottom: 3px;
  padding-left: 15px;
  text-indent: -15px;
}

.messagepop p, .messagepop.div {
  border-bottom: 1px solid #EFEFEF;
  margin: 8px 0;
  padding-bottom: 8px;
}

그리고 자바 스크립트 :

function deselect(e) {
  $('.pop').slideFadeToggle(function() {
    e.removeClass('selected');
  });    
}

$(function() {
  $('#contact').on('click', function() {
    if($(this).hasClass('selected')) {
      deselect($(this));               
    } else {
      $(this).addClass('selected');
      $('.pop').slideFadeToggle();
    }
    return false;
  });

  $('.close').on('click', function() {
    deselect($('#contact'));
    return false;
  });
});

$.fn.slideFadeToggle = function(easing, callback) {
  return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback);
};

그리고 마지막으로 HTML :

<div class="messagepop pop">
  <form method="post" id="new_message" action="/messages">
    <p><label for="email">Your email or name</label><input type="text" size="30" name="email" id="email" /></p>
    <p><label for="body">Message</label><textarea rows="6" name="body" id="body" cols="35"></textarea></p>
    <p><input type="submit" value="Send Message" name="commit" id="message_submit"/> or <a class="close" href="/">Cancel</a></p>
  </form>
</div>

<a href="/contact" id="contact">Contact Us</a>

다음은 jsfiddle 데모 및 구현입니다.

상황에 따라 ajax 호출을 통해 팝업 컨텐츠를로드 할 수 있습니다. 콘텐츠를보기 전에 사용자에게 더 큰 지연을 줄 수 있으므로 가능하면이를 피하는 것이 가장 좋습니다. 이 방법을 사용하면 몇 가지 변경 사항을 적용 할 수 있습니다.

HTML은 다음과 같습니다.

<div>
    <div class="messagepop pop"></div> 
    <a href="/contact" id="contact">Contact Us</a>
</div>

그리고 JavaScript의 일반적인 아이디어는 다음과 같습니다.

$("#contact").on('click', function() {
    if($(this).hasClass("selected")) {
        deselect();               
    } else {
        $(this).addClass("selected");
        $.get(this.href, function(data) {
            $(".pop").html(data).slideFadeToggle(function() { 
                $("input[type=text]:first").focus();
            });
        }
    }
    return false;
});

작동합니다. 감사합니다. 그러나 다른 버튼 호출 레지스터를 포함하려고합니다. 클릭하면 등록 양식이 팝업됩니다. 이를 위해 동일한 기능을 포함하고 ID 및 클래스의 이름을 변경했습니다. 문제는 등록 양식의 닫기 버튼을 클릭하면 연락처 양식을 전환합니다. 데이비스 @ 제이슨 도움이 필요하십니까
Rajasekar

1
닫기에 추가 한 HTML을 제거하려면 닫기 메소드를 $ ( ". close"). live ( 'click', function () {$ ( ". pop"). slideFadeToggle (); $ ( "# contact")로 변경하십시오. .removeClass ( "selected"); $ ( ". pop"). remove (); // 추가 ... return false;}); 팝업을 닫기 전에 링크를 두 번 이상 클릭하면 발생하는 문제가 해결됩니다. 멋지고
답답

10
@yahelc "등록"을 두 번 이상 클릭 한 다음 "취소"를 클릭하십시오. 어.
AVProgrammer

나는 "위대한 코드"부분에 동의하지 않습니다. 많은 콘텐츠가 자바 스크립트로 하드 코딩됩니다. 그렇습니다. 우리 모두는 브라우저에 자바 스크립트를 가지고 있지만 웹을하는 올바른 방법은 아닙니다. HTML은 내용, js는 "makeup"입니다. Karim79의 대답은 내 관점에서 더 좋습니다. HTML에 마크 업을 포함시키고 마크를 숨기고 표시 한 다음 팝업으로 표시하십시오. 자바 스크립트에서 직접 많은 HTML을 인쇄하는 것보다 훨씬 깨끗한 솔루션입니다. jQueryUI를 사용할 필요가 없다면 필요하지 않습니다. 일부 컨텐츠를 팝업에 넣는 방법은 백만 가지입니다.
ZolaKt

12
에 따르면 jQuery를 웹 사이트 , jQuery를 1.7로, .live () 메소드는 사용되지 않습니다. 사용 ) (CSTE 연구진은 이벤트 핸들러를 첨부 할 수 있습니다. 이전 버전의 jQuery 사용자는 .live ()보다 .delegate ()를 사용해야합니다. . 그래서 .live.on 으로 바꿨습니다 . 더 일반적인 버전의 Andy 코드를 보려면 여기를 클릭하십시오 . 또한, 나는 실제 페이지에 jQuery를의 최신 버전에 대한 CDN 링크를 사용<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min.js"></script>
발칸 까마귀

98

jQuery UI 대화 상자를 확인하십시오 . 다음과 같이 사용하십시오.

jQuery :

$(document).ready(function() {
    $("#dialog").dialog();
});

마크 업 :

<div id="dialog" title="Dialog Title">I'm in a dialog</div>

끝난!

그것이 가장 간단한 유스 케이스에 관한 것임을 명심하십시오. 문서 로 읽을 수있는 일에 대한 더 나은 아이디어를 얻기 위해 문서 를 읽는 것이 좋습니다 .


Jquery 이외의 플러그인을 포함해야합니까 ?? @Karim
Rajasekar

8
@Rajasekar-대화를 받으려면 jQuery UI 번들을 다운로드하고 최소한 ui.core.js 및 ui.dialog.js를 포함해야합니다. 대화 상자를 끌어 놓거나 크기를 조정할 수있게하려면 ui.draggable.js 및 ui.resizable.js를 포함해야합니다.
karim79 1

6
흠. jsfiddle로 더 나은 대답이 될 것입니다.
브라이스






3

매우 가벼운 모달 팝업 플러그인. POPELT - http://welbour.com/labs/popelt/

가볍고 중첩 된 팝업, 객체 지향, 동적 버튼, 반응 등을 지원합니다. 다음 업데이트에는 팝업 Ajax 양식 제출 등이 포함됩니다.

의견을 자유롭게 사용하고 트윗하십시오.


2

html5 및 javascript를 사용하는 간단한 팝업 창

html :-

    <dialog id="window">  
     <h3>Sample Dialog!</h3>  
     <p>Lorem ipsum dolor sit amet</p>  
     <button id="exit">Close Dialog</button>
    </dialog>  

  <button id="show">Show Dialog</button> 

자바 스크립트 :-

   (function() {  

            var dialog = document.getElementById('window');  
            document.getElementById('show').onclick = function() {  
                dialog.show();  
            };  
            document.getElementById('exit').onclick = function() {  
                dialog.close();  
            };
        })();

내가 얻을 TypeError: dialog.show is not a function오류입니다. JSFiddle을 포함시킬 수 있습니까?
Magiranu

0

다음은 매우 간단한 팝업입니다.

<!DOCTYPE html>
<html>
    <head>
        <style>
            #modal {
                position:absolute;
                background:gray;
                padding:8px;
            }

            #content {
                background:white;
                padding:20px;
            }

            #close {
                position:absolute;
                background:url(close.png);
                width:24px;
                height:27px;
                top:-7px;
                right:-7px;
            }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
            var modal = (function(){
                // Generate the HTML and add it to the document
                $modal = $('<div id="modal"></div>');
                $content = $('<div id="content"></div>');
                $close = $('<a id="close" href="#"></a>');

                $modal.hide();
                $modal.append($content, $close);

                $(document).ready(function(){
                    $('body').append($modal);                       
                });

                $close.click(function(e){
                    e.preventDefault();
                    $modal.hide();
                    $content.empty();
                });
                // Open the modal
                return function (content) {
                    $content.html(content);
                    // Center the modal in the viewport
                    $modal.css({
                        top: ($(window).height() - $modal.outerHeight()) / 2, 
                        left: ($(window).width() - $modal.outerWidth()) / 2
                    });
                    $modal.show();
                };
            }());

            // Wait until the DOM has loaded before querying the document
            $(document).ready(function(){
                $('a#popup').click(function(e){
                    modal("<p>This is popup's content.</p>");
                    e.preventDefault();
                });
            });
        </script>
    </head>
    <body>
        <a id='popup' href='#'>Simple popup</a>
    </body>
</html>

이 튜토리얼에서보다 유연한 솔루션을 찾을 수 있습니다. http://www.jacklmoore.com/notes/jquery-modal-tutorial/ 샘플에 대한 close.png 는 다음과 같습니다 .


0

CSS 팝업 논리 만! 그것을 시도하십시오. 쉬운! 나는이 mybe가 미래에 인기있는 핵이라고 생각합니다.

            <a href="#openModal">OPEN</a>

            <div id="openModal" class="modalDialog">
                <div>
                    <a href="#close"  class="close">X</a>
                    <h2>MODAL</h2>

                </div>
            </div>


.modalDialog {
    position: fixed;
    font-family: Arial, Helvetica, sans-serif;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: rgba(0,0,0,0.8);
    z-index: 99999;
    -webkit-transition: opacity 400ms ease-in;
    -moz-transition: opacity 400ms ease-in;
    transition: opacity 400ms ease-in;
    display: none;
    pointer-events: none;
}

.modalDialog:target {
    display: block;
    pointer-events: auto;
}

.modalDialog > div {
    width: 400px;
    position: relative;
    margin: 10% auto;
    padding: 5px 20px 13px 20px;
    border-radius: 10px;
    background: #fff;
    background: -moz-linear-gradient(#fff, #999);
    background: -webkit-linear-gradient(#fff, #999);
    background: -o-linear-gradient(#fff, #999);
}

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