我正在设计一个网页。当我们单击名为 mail 的 div 的内容时,如何显示一个包含标签电子邮件和文本框的弹出窗口?
首先是 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; });