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

IT技术 javascript jquery css ajax popup
2021-01-19 04:34:22

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

6个回答

首先是 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;
}

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

最后是 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;
});
根据jQuery 网站从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用.on()附加事件处理程序。旧版本 jQuery 的用户应该优先使用 .delegate() 而不是 .live()。. 所以我.on替换了.live单击此处查看更通用的 Andy 代码版本另外,我在实际页面上使用了 CDN 链接来获取更新版本的 jQuery<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min.js"></script>
2021-03-12 04:34:22
我不太同意“伟大的代码”部分。许多内容被硬编码到 javascript 中。是的,那时我们的浏览器中都有 javascript,但它根本不是做网络的正确方式。HTML 用于内容,js 用于“化妆”。从我的角度来看,Karim79 的答案更好。将您的标记包含在它所属的 HTML 中,将其隐藏,然后仅显示它并将其作为弹出窗口弹出。比直接从 javascript 打印大量 HTML 更简洁的解决方案。如果不需要,则不必使用 jQueryUI,有一百万种方法可以将某些内容放入弹出窗口
2021-03-14 04:34:22
它的工作,谢谢。但我要包括另一个按钮调用寄存器。单击时,应弹出注册表。为此,我包含了相同的函数并更改了 ID 和类的名称。问题是当我单击注册表单的关闭按钮时,它会切换联系表。需要帮助@jason Davis
2021-03-16 04:34:22
@yahelc 尝试连​​续多次单击“注册”,然后单击“取消”。哦哦哦哦。
2021-03-21 04:34:22
要删除您在关闭时添加的 html,请将关闭方法更改为 $(".close").live('click', function() { $(".pop").slideFadeToggle(); $("#contact") .removeClass("selected"); $(".pop").remove(); //添加这个... return false; }); 这将纠正您在关闭弹出窗口之前多次单击链接时遇到的问题。顺便说一句,很好的答案,圆滑而简单......
2021-04-10 04:34:22

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

jQuery:

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

标记:

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

完毕!

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

除了 Jquery 我是否必须包含任何插件?@卡里姆
2021-03-12 04:34:22
@Rajasekar - 您需要下载 jQuery UI 包,并且至少包含 ui.core.js 和 ui.dialog.js 以获得对话。如果您希望对话可拖动和/或可调整大小,则需要包含 ui.draggable.js 和 ui.resizable.js。
2021-03-12 04:34:22
唔。使用 jsfiddle 会是一个更好的答案。
2021-03-26 04:34:22

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

  1. 非常容易使用
  2. 轻的
  3. 可定制
  4. 我见过的最好的 jQuery 弹出对话框

试试Magnific Popup,它react灵敏,重量只有 3KB 左右。

访问这个网址

Jquery UI 对话框演示