如何使用jQuery生成一个简单的弹出窗口

Raj*_*kar 215 javascript css ajax jquery popup

我正在设计一个网页.当我们点击div命名邮件的内容时,如何显示包含标签电子邮件和文本框的弹出窗口?

And*_*ell 240

首先是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;
}
Run Code Online (Sandbox Code Playgroud)

和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);
};
Run Code Online (Sandbox Code Playgroud)

最后是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>
Run Code Online (Sandbox Code Playgroud)

这是一个jsfiddle演示和实现.

根据情况,您可能希望通过ajax调用加载弹出内容.如果可能的话,最好避免这种情况,因为它可能会在看到内容之前给用户带来更大的延迟.如果采用这种方法,您可以在这里进行一些改变.

HTML变为:

<div>
    <div class="messagepop pop"></div> 
    <a href="/contact" id="contact">Contact Us</a>
</div>
Run Code Online (Sandbox Code Playgroud)

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;
});
Run Code Online (Sandbox Code Playgroud)

  • 根据[jQuery网站](http://api.jquery.com/live/),**从jQuery 1.7开始,不推荐使用.live()方法.使用[.on()](http://api.jquery.com/on/)附加事件处理程序.旧版jQuery的用户应该使用.delegate()而不是.live().**.所以我用*.on*替换了*.live*.[点击这里查看Andy代码的更通用版本](http://jsfiddle.net/h7pxU/835/).另外,我在实际页面上使用CDN链接获取更新版本的jQuery"<script type ="text/javascript"src ="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min的.js"> </ SCRIPT>` (12认同)
  • @yahelc尝试连续多次单击"注册",然后单击"取消".嗯,oooohhhh. (10认同)

kar*_*m79 98

查看jQuery UI对话框.你会像这样使用它:

jQuery:

$(document).ready(function() {
    $("#dialog").dialog();
});
Run Code Online (Sandbox Code Playgroud)

标记:

<div id="dialog" title="Dialog Title">I'm in a dialog</div>
Run Code Online (Sandbox Code Playgroud)

完成!

请记住,这是关于最简单的用例,我建议阅读文档以更好地了解可以用它做什么.

  • @Rajasekar - 您需要下载jQuery UI包,至少包括ui.core.js和ui.dialog.js以获得对话.如果您希望对话框可拖动和/或可调整大小,那么您需要包含ui.draggable.js和ui.resizable.js. (8认同)
  • 嗯.用jsfiddle是一个更好的答案. (6认同)

Jas*_*vis 23

我使用一个名为ColorBox的jQuery插件,它是

  1. 非常好用
  2. 轻量级
  3. 定制
  4. 我见过的jQuery最好的弹出对话框


Mar*_*in3 8

尝试Magnific Popup,它响应迅速,重量仅为3KB左右.