jQuery 投票调查组件

2009-09-14 21:51:03 作者:lekaihuai 来源: 浏览次数:0 网友评论 0

jQuery 投票调查组件

前两天同学推荐玩玩校内的各种测试 进去一看 FLASH做的测试的界面不错 就用jQuery模拟了一下.写了两个版本的 一个是静态的 把调查问题写在页面里面的 一个是可以通过XML文件更新的

主要功能:

测试答题框

可作心理测试等测试题使用

问题和选项通过questions.xml设置

显示当前得分

显示当前答题进度

可作翻看选过的选项

通过不同的得分调取不同结果内容

点击查看在线演示

DEMO 地址 静态版本

DEMO 地址 XML 版本

文件打包下载

下面是装载XML 版本的代码 完整的代码请 打包下载

$(document).ready(function(){ 
var ua = navigator.userAgent.toLowerCase(); 
//浏览器检测 本地测试时 FF会找不到路径 用下面的条件避免
var binfo =
{
   ve : ua.match(/.+(?:rv|it|ra|ie|me)[\/: ]([\d.]+)/)[1],
   ie : /msie/.test(ua) && !/opera/.test(ua),
   op : /opera/.test(ua),
   sa : /version.*safari/.test(ua),
   ch : /chrome/.test(ua),
   ff : /gecko/.test(ua) && !/webkit/.test(ua)
};
var xmlurl="data/questions.xml";
if(binfo.ie) xmlurl="
http://nba.titan24.com/focus/kikx/questions.xml"; //本地测试的时候IE 要用绝对地址才行
//if(binfo.ff) xmlurl="questions.xml";
var page="data/result.html";  
 //存放测试结果的文件     
$.ajax({ 
//页面加载后去调取XML
     type:"GET",
     
url:xmlurl,
     dataType:'xml',
     timeut:1500,
     error:function(){alert("Error loading xml!")},   
     success:function(xml){ 
//调取成功后解析XML并执行相应操作
      $("#loader").fadeOut(200);
       var i=0;
     var sld=0;
     var res=0; 
     var prog=100; 
//$("#prog").css("width");
     var ht=420;
     var speed=500;        
    var len=$(xml).find("quesiton").length; 
//这是问题的总数
    
     $(xml).find("quesiton").each(function(){ 
//解析XML 转意生成HTML 
     var h3="<h3>"+$(this).find("title").text()+"</h3>";    
     var li="";    
     $(this).find("opt").each(function(){
      li+="<li><span>&nbsp;</span><label><input type='radio' value='"+$(this).attr("valume")+"'\/>"+$(this).text()+"</label></li>";     
      })    
     var ul="<ul>"+li+"</ul>";    
     $("<div class='cnt'></div>").html(h3+ul).appendTo($("#issue"));    
     })    
     
     function setporogress(j){   
//每做完一个题目的翻转和进度提示函数
     i+=j;
     i=(i<0)? 0:i;
     checkbtn();
     if(!$("#info").is(":animated")){   
      $("#tips span").html((i+1>len?len:i+1)+"\/"+len+"题");  
      var wh=$("#tips").get(0).offsetWidth;  
      var ress=Math.round(i*prog/len);  
      $("#ress").css({"width": ress+"px"});  
      $("#tips").css({"left":ress-Math.round(wh/2)+"px"});
      $("#issue").animate({"top": -i*ht + "px"},500);
      }
     }
  
    function selec(ele){  
 //选中项目标识 计算和显示得分
     sld++;    
     ele= $(ele)? $(ele):ele;
     ele.parents("div.cnt").addClass("selected");
     ele.addClass("sel");
     res+=parseInt (ele.find("input").val());
     if(sld<len){
      $("#temp").html("您目前得分是 "+res);  
      }else if(sld==len){
       $("#temp").html("您最终得分是 "+res);  
       }
     }
  
    $("#prev").click(function(){
 //翻看题目 可以翻看回答过的 但是不能翻看没有回答的
     checkbtn();       
     if(i>0) {
      setporogress(-1)
      }
     }) 
    $("#next").click(function(){
     checkbtn();       
     if(sld>i) {
      setporogress(1)
      }
     }) 

    $("#issue").find("li").click(function(){   
// 备选答案项目点击后 判断是否执行选中操作      
      if(!$(this).parents("div.cnt").hasClass("selected")){       
       selec(this);    
       }   
      setporogress(1);     
      if(i==len){
 
//全部题目回答完毕 计算回答的结果
       result(res);
       } 
      return false; 
     })

    function result(k){ 
//计算结果 也就是根据得分计算应该调取哪部分内容
     var toload;
     var sult=$("<div class='result' id='result'></div>");
     if(k>=12 && k<=18) toload=page+" #re0";
     if(k>18 && k<=24) toload=page+" #re1";
     if(k>24 && k<=48) toload=page+" #re2";  
     sult.load(toload).appendTo($("#issue"));  
     }
  
    function checkbtn(){ 
//检测前翻和后翻的可用性 并更新状态
     if(i<=0){
      $("#prev").addClass("noprev");
      }else{
       $("#prev").removeClass("noprev");
       }
     if(sld<=i){
      $("#next").addClass("nonext");
      }else{
       $("#next").removeClass("nonext");
       } 
     }
   
    setporogress(i); 
//初始化问题框
} 
     
})
})




关键词:组件调查 "

[错误报告] [收藏] [打印] [关闭] [返回顶部]

最新图片文章

最新文章