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 相关文章推荐
Javascript判断对象是否相等实现代码
Mar 18 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
ES6新特性三: Generator(生成器)函数详解
Apr 21 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
JavaScript实现更换背景图片
Oct 18 Javascript
在Vuex中Mutations修改状态操作
Jul 24 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
angular.element方法汇总
2015/01/07 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
python使用turtle库绘制时钟
2020/03/25 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
pip安装python库的方法总结
2019/08/02 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python图片合成的示例
2020/11/09 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
暑期实践个人总结
2015/03/06 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
离婚律师函范本
2015/05/27 职场文书
乔迁新居祝福语
2019/11/04 职场文书
PHP正则表达式之RCEService回溯
2022/04/11 PHP