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 相关文章推荐
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
javascript得到当前页的来路即前一页地址的方法
Feb 18 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
深入理解JavaScript 函数
Jun 06 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
elementUI select组件使用及注意事项详解
May 29 Javascript
vue中改变滚动条样式的方法
Mar 03 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静态类的原罪详解
2013/05/06 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
为数据添加append,remove功能
2006/10/03 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python 获取字典键值对的实现
2020/11/12 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
大学同学聚会邀请函
2014/01/29 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
先进典型事迹材料
2014/12/29 职场文书
助学感谢信范文
2015/01/21 职场文书
努力学习保证书
2015/02/26 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers