Cách tạo một popup đơn giản bằng jQuery


217

Tôi đang thiết kế một trang web. Khi chúng tôi nhấp vào nội dung của thư có tên div, làm cách nào tôi có thể hiển thị cửa sổ bật lên có chứa email và hộp văn bản nhãn?


1
Tôi thấy câu trả lời này rất hữu ích cho các cảnh báo nhanh mà không cần chạm vào HTML hoặc CSS hiện có. Nó tạo và hiển thị một div chỉ sử dụng jQuery từ js.
mabi

Câu trả lời:


241

Đầu tiên CSS - điều chỉnh cái này theo cách bạn thích:

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;
}

Và JavaScript:

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);
};

Và cuối cùng là 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>

Dưới đây là một bản demo và thực hiện jsfiddle.

Tùy thuộc vào tình huống bạn có thể muốn tải nội dung bật lên thông qua cuộc gọi ajax. Tốt nhất nên tránh điều này nếu có thể vì nó có thể khiến người dùng chậm trễ đáng kể hơn trước khi xem nội dung. Ở đây có một vài thay đổi mà bạn sẽ muốn thực hiện nếu bạn thực hiện phương pháp này.

HTML trở thành:

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

Và ý tưởng chung về JavaScript trở thành:

$("#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;
});

Nó hoạt động, cảm ơn. Nhưng tôi sẽ bao gồm một nút đăng ký cuộc gọi. Khi được nhấp, biểu mẫu đăng ký sẽ bật lên. Vì vậy, tôi đã bao gồm cùng một chức năng và thay đổi tên của id và các lớp. Vấn đề là khi tôi nhấp vào nút đóng của biểu mẫu đăng ký, nó sẽ tắt biểu mẫu liên hệ. Cần giúp đỡ @jason Davis
Rajasekar

1
để xóa html bạn thêm vào đóng, thay đổi phương thức đóng thành $ (". close"). live ('click', function () {$ (". pop"). slideFadeToggle (); $ ("# contact") .removeClass ("đã chọn"); $ (". pop"). remove (); // thêm cái này ... return false;}); điều này sẽ khắc phục vấn đề bạn gặp phải khi bạn nhấp vào liên kết nhiều hơn một lần trước khi đóng cửa sổ bật lên. Nhân tiện, câu trả lời hay,
lắt

10
@yahelc Hãy thử nhấp vào "Đăng ký" nhiều lần liên tiếp, sau đó nhấp vào "Hủy". Uh-oooohhhh.
AVProgrammer

Tôi không hoàn toàn đồng ý về phần "mã tuyệt vời". Rất nhiều nội dung được mã hóa cứng thành javascript. Vâng, tất cả chúng ta đều có javascript trong trình duyệt của mình vài ngày, nhưng đơn giản đó không phải là cách làm web đúng đắn. HTML là dành cho nội dung, js cho "trang điểm". Karim79 trả lời là tốt hơn từ quan điểm của tôi. Bao gồm đánh dấu của bạn trong HTML nơi nó thuộc về, ẩn nó và chỉ hiển thị nó và đưa nó lên dưới dạng cửa sổ bật lên. Giải pháp sạch hơn nhiều so với in rất nhiều HTML trực tiếp từ javascript. Bạn không phải sử dụng jQueryUI nếu bạn không cần nó, có một triệu cách để đưa một số nội dung vào cửa sổ bật lên
ZolaKt

12
Theo trang web jQuery , kể từ jQuery 1.7, phương thức .live () không được dùng nữa. Sử dụng .on () để đính kèm các trình xử lý sự kiện. Người dùng các phiên bản cũ hơn của jQuery nên sử dụng .delegate () để ưu tiên cho .live (). . Vì vậy, tôi thay thế .live với .Trên . Nhấn vào đây để xem phiên bản mã Andy chung hơn . Ngoài ra, tôi đã sử dụng liên kết CDN cho phiên bản jQuery gần đây hơn trên trang thực tế<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min.js"></script>
Vulcan raven

98

Kiểm tra hộp thoại UI UI . Bạn sẽ sử dụng nó như thế này:

JQuery:

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

Đánh dấu:

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

Làm xong!

Hãy nhớ rằng đó là trường hợp sử dụng đơn giản nhất, tôi khuyên bạn nên đọc tài liệu để có ý tưởng tốt hơn về những gì có thể được thực hiện với nó.


Khác với Jquery liệu tôi có phải bao gồm bất kỳ plugin nào không ?? @Karim
Rajasekar

8
@Rajasekar - Bạn sẽ cần tải xuống gói UI UI và ít nhất bao gồm ui.core.js và ui.dialog.js để có được Đối thoại. Nếu bạn muốn đoạn hội thoại có thể kéo được và / hoặc có thể thay đổi kích thước thì bạn sẽ cần bao gồm ui.draggable.js và ui.resizable.js.
karim79

6
Hừm. Sẽ là một câu trả lời tốt hơn với một jsfiddle.
Bryce

23

Tôi sử dụng một plugin jQuery có tên là ColorBox .

  1. Rất dễ sử dụng
  2. nhẹ
  3. tùy chỉnh
  4. hộp thoại bật lên đẹp nhất tôi đã thấy cho jQuery chưa





3

Plugin bật lên cực kỳ nhẹ Modal. DỄ DÀNG - http://welbour.com/labs/popelt/

Nó rất nhẹ, hỗ trợ các cửa sổ bật lên lồng nhau, hướng đối tượng, hỗ trợ các nút động, đáp ứng và nhiều hơn nữa. Bản cập nhật tiếp theo sẽ bao gồm các lần gửi biểu mẫu Popup Ajax, v.v.

Hãy sử dụng và phản hồi tweet.


2

Cửa sổ bật lên đơn giản bằng cách sử dụng html5 và 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> 

JavaScript: -

   (function() {  

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

Tôi nhận được một TypeError: dialog.show is not a functionlỗi. Bạn có thể vui lòng bao gồm một JSFiddle không?
Magiranu

0

Đây là một cửa sổ bật lên rất đơn giản:

<!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>

Giải pháp linh hoạt hơn có thể được tìm thấy trong hướng dẫn này: http://www.jacklmoore.com/notes/jquery-modal-tutorial/ Dưới đây close.png cho mẫu.


0

CHỈ NHẬP CSS POPUP! HÃY THỬ. DỄ DÀNG! Tôi nghĩ rằng đây là hack phổ biến trong tương lai

            <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);
}

Nó không đóng!
vy32
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.