使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体


Posted in Javascript onJanuary 15, 2013

模态窗体已经成为Web开发人员设计界面时经常要使用的传输数据的方式。通过模态窗口,可以提高网站的可用性。正好项目的需要,有个客户想要模态弹出的窗体来提交网站的反馈,经过一番测试实现了,我使用jQuery fancybox插件来创建一个漂亮的模态窗体,提交表单的数据在服务器端实现Ajax调用。你可以在你的邮件里收到用户发送的反馈消息

html代码
header部分主要的JS文件如下引入jquery代码和fancybox代码

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript" src="fancybox/jquery.fancybox.js?v=2.0.6"></script>

演示
首先,从官网
下载最新的Fancybox,并解压缩。核心的HTML页面代码是非常简单的,这里有一个隐藏的DIV,当用户单击href链接时候,打开一个模态窗口。
<div id="wrapper"> 
Send us feedback from the modal window. <a class="modalbox" href="#inline">有本事你点我</a></div> 
<!-- hidden inline form --> 
<div id="inline"> 
<h2>发送消息给我们</h2> 
<form id="contact" action="#" method="post" name="contact"><label for="email">你的邮件</label> 
<input id="email" class="txt" type="email" name="email" /> 
<label for="msg">你想要对我们说</label> 
<textarea id="msg" class="txtarea" name="msg"></textarea> 
<button id="send">立即发送</button></form></div>
 使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体

CSS样式表

设置文本框的颜色,大小,获得焦点下的样式等等,使用:hover:active  来显示状态。

.txt { 
display: inline-block; 
color: #676767; 
width: 420px; 
font-family: Arial, Tahoma, sans-serif; 
margin-bottom: 10px; 
border: 1px dotted #ccc; 
padding: 5px 9px; 
font-size: 1.2em; 
line-height: 1.4em; 
} .txtarea { 
display: block; 
resize: none; 
color: #676767; 
font-family: Arial, Tahoma, sans-serif; 
margin-bottom: 10px; 
width: 500px; 
height: 150px; 
border: 1px dotted #ccc; 
padding: 5px 9px; 
font-size: 1.2em; 
line-height: 1.4em; 
} 
.txt:focus, 
.txtarea:focus { 
border-style: solid; 
border-color: #bababa; 
color: #444; 
} 
input.error, 
textarea.error { 
border-color: #973d3d; 
border-style: solid; 
background: #f0bebe; 
color: #a35959; 
} 
input.error:focus, 
textarea.error:focus { 
border-color: #973d3d; 
color: #a35959; 
}

我定义了一个错误的css类,结合jquery用来检测用户输入的数据是否正确,输入错误数据会使字段文字,边框和背景变成深色。直到用户输入有效的数据字段颜色将恢复正常。

使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体

使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体

#send { 
color: #dee5f0; 
display: block; 
cursor: pointer; 
padding: 5px 11px; 
font-size: 1.2em; 
border: solid 1px #224983; 
border-radius: 5px; 
background: #1e4c99; 
background: -webkit-gradient(linear, left top, left bottom, from(#2f52b7), to(#0e3a7d)); 
background: -moz-linear-gradient(top, #2f52b7, #0e3a7d); 
background: -webkit-linear-gradient(top, #2f52b7, #0e3a7d); 
background: -o-linear-gradient(top, #2f52b7, #0e3a7d); 
background: -ms-linear-gradient(top, #2f52b7, #0e3a7d); 
background: linear-gradient(top, #2f52b7, #0e3a7d); 
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2f52b7', endColorstr='#0e3a7d'); 
} #send:hover { 
background: #183d80; 
background: -webkit-gradient(linear, left top, left bottom, from(#284f9d), to(#0c2b6b)); 
background: -moz-linear-gradient(top, #284f9d, #0c2b6b); 
background: -webkit-linear-gradient(top, #284f9d, #0c2b6b); 
background: -o-linear-gradient(top, #284f9d, #0c2b6b); 
background: -ms-linear-gradient(top, #284f9d, #0c2b6b); 
background: linear-gradient(top, #284f9d, #0c2b6b); 
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#284f9d', endColorstr='#0c2b6b'); 
} 
#send:active { 
color: #8c9dc0; 
background: -webkit-gradient(linear, left top, left bottom, from(#0e387d), to(#2f55b7)); 
background: -moz-linear-gradient(top, #0e387d, #2f55b7); 
background: -webkit-linear-gradient(top, #0e387d, #2f55b7); 
background: -o-linear-gradient(top, #0e387d, #2f55b7); 
background: -ms-linear-gradient(top, #0e387d, #2f55b7); 
background: linear-gradient(top, #0e387d, #2f55b7); 
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0e387d', endColorstr='#2f55b7'); 
}

CSS 按钮我使用 CSS3来创建线型渐变,代码如上

使用 Fancybox

页面加载元素完成之后,调用Fancybox默认代码

$(document).ready(function() { 
$(".modalbox").fancybox(); 
$("#contact").submit(function() { return false; });//禁用默认的窗体提交

代码的第二行禁用默认的联系人表单提交动作。为什么呢?因此这样我们可以处理自己的单击事件,并通过 Ajax 传递数据。在用户提交表单后,我们需要得到 (电子邮件和消息) 两个字段的当前值。我们还想要检查电子邮件地址是否有效和消息长度是否超过规定的长度值
$("#send").on("click", function(){ 
var emailval = $("#email").val(); 
var msgval = $("#msg").val(); 
var msglen = msgval.length; 
var mailvalid = validateEmail(emailval); if(mailvalid == false) { 
$("#email").addClass("error"); 
} 
else if(mailvalid == true){ 
$("#email").removeClass("error"); 
} 
if(msglen < 4) { 
$("#msg").addClass("error"); 
} 
else if(msglen >= 4){ 
$("#msg").removeClass("error"); 
}

上面jquery代码使用一些逻辑语句。直到电子邮件有效和消息的长度超过 4 个字母,才会提交表单。

发送Ajax 请求
通过上面的onclick事件,需要将表单数据发送到 PHP。,我们将在我们的收件箱中收到电子邮件。
// 如果两个字段验证通过接下来发送消息 //点击发送按钮之后 ,按钮被替换成“发送中”这样的文字提示,目的是为了防止用户在点击提交,提示也更人性化 
$("#send").replaceWith("<em>发送中...</em>"); 
$.ajax({ 
type: 'POST', 
url: 'sendmessage.php', 
data: $("#contact").serialize(), 
success: function(data) { 
if(data == "true") { 
$("#contact").fadeOut("fast", function(){ 
$(this).before("<p><strong>提交成功! 您的留言已经发送, 谢谢 :)</strong></p>"); 
setTimeout("$.fancybox.close()", 1000); 
}); 
} 
} 
}); 
} 
});

这里使用serialize(),方法来序列化提交的ajax数据,使得生成标准的URL编码
服务器响应成功之后,隐藏弹出的窗体,并显示一条成功消息。我使用 setTimeout() 方法来关闭 fancybox ,这里我设置一秒钟后隐藏窗体。要执行此操作的 JS 代码是 $.fancybox.close()。

使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体

 

使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体

使用 PHP发送邮件
sendmessage.php 接受用户输入的变量。然后调用mail尝试发送它,发送成功返回"true"否则返回false
$sendto = "2495371937@qq.com";//定义邮件的接收者 
$usermail = $_POST['email'];//获取电子邮件 
$content = nl2br($_POST['msg']);//获取消息 $subject = "你有新的消息"; 
$headers = "来自: " . strip_tags($usermail) . "\r\n"; 
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n"; 
$headers .= "MIME-Version: 1.0\r\aan"; 
$headers .= "Content-Type: text/html;charset=utf-8 \r\n"; 
$msg = ""; 
$msg .= "<h2 style="font-weight: bold; border-bottom: 1px dotted #ccc;">你有新的消息</h2>\r\n"; 
$msg .= "<strong>来自:</strong> ".$usermail."\r\n"; 
$msg .= "<strong>内容:</strong> ".$content."\r\n"; 
$msg .= ""; 
if(@mail($sendto, $subject, $msg, $headers)) { 
echo "true"; 
} else { 
echo "false"; 
}

演示
Javascript 相关文章推荐
jquery遍历checkbox介绍
Feb 21 Javascript
js实现仿爱微网两级导航菜单效果代码
Aug 31 Javascript
使用Javascript写的2048小游戏
Nov 25 Javascript
新手学习前端之js模仿淘宝主页网站
Oct 31 Javascript
jQuery源码分析之init的详细介绍
Feb 13 Javascript
AngularJS $http模块POST请求实现
Apr 08 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
解决微信小程序中的滚动穿透问题
Sep 16 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 Javascript
尝试在让script的type属性等于text/html
Jan 15 #Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 #Javascript
js弹出框轻量级插件jquery.boxy使用介绍
Jan 15 #Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
Jan 15 #Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 #Javascript
script的async属性以非阻塞的模式加载脚本
Jan 15 #Javascript
javascript真的不难-回顾一下基础知识
Jan 15 #Javascript
You might like
学习php过程中的一些注意点的总结
2013/10/25 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
Python中文竖排显示的方法
2015/07/28 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python多线程抽象编程模型详解
2019/03/20 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
高中物理教学反思
2014/02/08 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
2014组织生活会方案
2014/05/19 职场文书
运动会入场词
2015/07/18 职场文书
优质护理服务心得体会
2016/01/22 职场文书
React配置子路由的实现
2021/06/03 Javascript
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
Java 超详细讲解hashCode方法
2022/04/07 Java/Android