jWiard 基于JQuery的强大的向导控件介绍


Posted in Javascript onOctober 28, 2011

我就不贴我现在做项目的代码,我直接把作者的示例搬过来,因为改动不大,只要做点修改,就能很好的满足我们自己的需求。

原文地址 猛点这里下载      

作者官网   不过是英文的,英语好的话 可以看原文,生怕我表达错误。

不知道童鞋们在平时的开发用到用向导式开发这种方式没有?有人问 什么是向导式开发呢?其实,很简单,就是让用户完成一个步骤,然后点击下一步,完成一个步骤就点击下一步,这样 按照我师父的来说,可以很好的提升用户体验。

OK,废话不说了,先来一个最简单的例子:
例子1:
1.1当然咯,既然是JQuery 就少不了需要引用JQuery库吧。在上面就能下到相关的类库。
JQuery Class and Style

<!-- jquery ui theme --> 
<link rel="stylesheet" href="/path/to/jquery-ui.css" /> 
<!-- required CSS basics --> 
<link rel="stylesheet" href="/path/to/jWizard.base.css" /> 
<!-- duh --> 
<script type="text/javascript" src="/path/to/jquery.js"></script> 
<!-- at least the widget factory --> 
<script type="text/javascript" src="/path/to/jquery-ui.js"></script> 
<!-- and the plugin itself --> 
<script type="text/javascript" src="/path/to/jWizard.min.js"></script>

1.2 然后就开始写 HTML代码了,也很简单。
HTML Code
<form id="wizard-form" class="jWizard"> 
<fieldset> 
<legend>Beginning</legend> 
<p>Are you sure you want to begin? Press "Next" to proceed?</p> 
</fieldset> 
<fieldset> 
<legend>Middle</legend> 
<p>Are you sure you want to?</p> 
<p>You can still go back. Or press "Next" again to confirm.</p> 
</fieldset> 
<fieldset> 
<legend>End</legend> 
<p>Done, click "Finish" to end</p> 
</fieldset> 
</form> 
<!-- Can also just be divs with title attributes --> 
<div id="wizard-div" class="jWizard"> 
<div title="Beginning"> 
<p>Are you sure you want to begin? Press "Next" to proceed?</p> 
</div> 
<div title="Middle"> 
<p>Are you sure you want to?</p> 
<p>You can still go back. Or press "Next" again to confirm.</p> 
</div> 
<div title="End"> 
<p>Done, click "Finish" to end</p> 
</div> 
</div>

你可以在上面的HTML代码了 进行添加相关的div,不过 可别忘记了给最外面的赋上title值哦。
1.3 js开始调用。
JS Call
$(".jWizard").jWizard({ 
menuEnable: true, 
counter: { 
enable: true, 
progressbar: true 
}, 
effects: { enable: true } 
});

OK, 到此为止,上面的基本步骤就实现了,效果如下:

jWiard 基于JQuery的强大的向导控件介绍
示例 2:给next添加事件
在我现在做的第一个版本里,刚开始比如有上传文件,验证文件等等操作,很二的直接在页面放了一个button,然后触发它的javascript代码。这样做可以满足基本功能的需求,可是也非常严重的损害了用户的体验。因为,现在的用户非常的懒,能少做一点事情,它是绝对不会多做的。所以,如果你放一个button,用户不想去点击,然后就点击next了,那么就得不到需要的用户,就会报错。
因此,我们可以把一些操作都集成到Next中去,那这样子就灰常灰常的方便了,而且页面也变的灰常灰常的整洁大方。
其余代码可以基本不变,现在我主要讲一下js里面的事件机制,代码如下:

var $w = $("#events-test"); 
$w.validate({ errorClass: "ui-state-error-text" }); 
$w 
.jWizard({ 
buttons: { 
cancelType: "reset", // 点击”Cancel“按钮的时候 触发的动作,比如我在项目中,是跳到第一页 重新开始。 
finishType: "submit" // 在最后一步点击”finish“的时候,出发的动作,也就是提交。 
}, 
// 点击”Cancel“按钮的时候 触发的动作,比如我在项目中,是跳到第一页 重新开始。 
cancel: function(event, ui) { 
$w.jWizard("firstStep"); 
},
  // 点击previous的时候触发的动作。比如在我项目中,因为当把所有的邮件都发送完毕的时候,就不能让用户上一页了,所以我要把上一页的功能给进禁止掉。很简单,如下; 
previous: function(event, ui) { 
// if(ui.currentStepIndex==7){return false;} 就可以了。7 指的是你的div的顺序数字,从0开始,哈这个会数吧。 
}, 
next: function(event, ui) { 
// 这里同理哦,就是控制下一页的情况,也是上面一样。比如,在我项目中,有一个上传数据的,要是没有就不能让它上传。这种情况 你可以先设定一个bool值,然后, 
if(fileUploadComplete){ $.get("@Url.Action("VerificationSchema", "Home")", // 这里学习MVC的童鞋们应该很熟悉 其实也就是在action home 下面的方法 VerificationSchema function (data) { // 获取成功后返回的数据 var newData = eval(data); // 因为用的json 所以用eval 进行转换 schemaVerification=newData.HasErrors; if(newData.HasErrors) { var listing1 = document.getElementById("listing1"); listing1.innerHTML = "<font color='red' size='20px'>Congruations.Please go on.</font>"; } else { document.getElementById("ErrorNotification").innerHTML="Sorry.Your Schema wrong,please check it."; var listing1 = document.getElementById("listing1"); listing1.innerHTML = newData.Result; } },"json");} else { //这里主要是当没有选择数据的时候 进行提示 alert("Please firstly Upload the Excel File you need"); return false; } break; }, 
finish: function(event, ui) { 
alert("Thank you!"); 
} 
}) 
/** The bindings below are event handlers, they will all be executed before proceeding to the callback */ 
/** ui = { 
type: "previous|next|first|last|manual", 
currentStepIndex: [int], 
nextStepIndex: [int] 
}; */ 
// This event handler is specifically used for form validation 
.bind("jwizardchangestep", function (event, ui) { 
// "manual" is always triggered by the user, never jWizard itself 
if (ui.type !== "manual") { 
var $currentStep = $w.find(".jw-step:eq(" + ui.currentStepIndex + ")"), 
$inputs = $currentStep.find("input:text"); 
/** I am assuming you have `jquery.validate.js` running in this callback */ 
if ($inputs.length > 0 && !$inputs.valid()) { 
$currentStep.find("label.error").effect("highlight"); 
return false; 
} 
} 
}) 
// This event handler is for handling custom navigation through the wizard 
.bind("jwizardchangestep", function (event, ui) { 
// "manual" is always triggered by the user, never jWizard itself 
if (ui.type !== "manual") { 
// 这里其实是比较重要的,因为这里就是选择对应div的实现方式的,你只需要把相应模块的javascript代码集成到这里就可以了。 
switch (ui.currentStepIndex) { 
// on the first step, the user must agree to the terms and conditions 
case 0: 
if ($("#agree").is(":not(:checked)")) { 
// use this effect to give the user feedback 
$("#agree").parent().effect("pulsate"); 
return false; 
} 
break; 
// on the 3rd step, (zero-index) the username being filled means we are skipping the openid step 
case 2: 
if ($("#username").val() != "") { 
// by setting this value on the event object, I am telling jWizard to override the nextStepIndex 
event.nextStepIndex = 4; 
// you must at least call event.preventDefault(); in order for this to work 
return false; 
} 
break; 
} 
} 
// by using nextStepIndex, we can intercept the user when they are *about to start* on a particular step 
switch (ui.nextStepIndex) { 
// in this case, I am displaying a summary on the last step of the wizard 
case 4: 
var oFormValues = { 
name: $("#name").val(), 
email: $("#email").val(), 
username: $("#username").val(), 
openid: undefined 
}; 
$("#summary-name").children("td").text(oFormValues.name); 
$("#summary-email").children("td").text(oFormValues.email); 
if (oFormValues.username != "") { 
$("#summary-username").show().children("td").text(oFormValues.username); 
$("#summary-openid").hide().children("td").text(""); 
} else { 
var $openid = $w.find("input:radio:checked[name=openid]"); 
oFormValues.openid = ($openid.length === 1) ? $openid.val() : $("#openid-other").val(); 
$("#summary-username").hide().children("td").text(""); 
$("#summary-openid").show().children("td").text(oFormValues.openid); 
} 
break; 
} 
}); 
// if the user clicks the openid link on step 3, (zero-index) cause the wizard to jump to the openid step 
$("#openid").click(function () { 
$w.jWizard("changeStep", 3); 
return false; 
}); 
// if an openid radio button is checked, blank out the `other` textbox 
$w.find("input:radio[name=openid]").change(function (event) { 
$("#openid-other").val(""); 
}); 
// if the `other` openid textbox is used, blank out the radio buttons 
$("#openid-other").change(function (event) { 
if (this.value != "") { 
$w.find("input:radio[name=openid]").removeAttr("checked"); 
} 
});

sum,我的搜狗怎么突然就没有用了。
算了 以上就是我的一点点经验,就不说了,吃饭时间到了,如果有需要的童鞋在做开发的时候,如果遇到问题,可以进行共同讨论,呵呵 共同进步嘛。

具体效果在这里 。

Javascript 相关文章推荐
js调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 Javascript
JavaScript SHA512加密算法详细代码
Oct 06 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
Nov 07 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
swiper实现导航滚动效果
Dec 13 Javascript
理解JSON:3分钟课程
Oct 28 #Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 #Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 #Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 #Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 #Javascript
input 和 textarea 输入框最大文字限制的jquery插件
Oct 27 #Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 #Javascript
You might like
转PHP手册及PHP编程标准
2006/12/17 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
基于php下载文件的详解
2013/06/02 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
Angular2库初探
2017/03/01 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
Python socket编程实例详解
2015/05/27 Python
python写日志封装类实例
2015/06/28 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
歌唱比赛主持词
2014/03/18 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL