最近公司項目應客戶要求,web端須要跟桌面端同樣實現經過滑動條設置計劃起始時間,因此就研究了一下Slider插件,被搞慘了。下面簡單描述一下需求。 css
需求場景:首先,要使用滑動條進行方式進行計劃起始時間的編輯(這不難,能夠很容易使用slider實現),另外還須要提供一個彈出層對起始時間進行編輯,編輯完提交後自動更新滑動條上的起始時間滑塊(這點有點費勁),效果圖以下(實如今下面咯~~~): html
圖一、滑動條 web
圖二、右鍵菜單 ajax
圖三、彈出層編輯 json
實現思路:滑動條實現起來不是很難,在initSlider的時候,向服務器發送請求獲得全部資計劃的json對象,遍歷子計劃,並添加slider元素到頁面便可,上幹活~~~~。 服務器
全部的slider都在下面的.layout裏面,至於那兩個時間input是父計劃的起始時間(子計劃時間與父計劃的關係,我就不說了~~) app
<div class="layout"> <input id="mindate" type="text" value="${plans.startdate}" /> <input id="maxdate" type="text" value="${plans.enddate}" /> </div>
//初始化slider $(document).ready(function(){ initSlider(); });
var planid = $("#planid").val(); var pre; var next; var curSlider; var url = '/plans/getSubPlanJson/' + planid; $.ajax({ type: "POST", dataType: "json", url: url, cache: false, data: "", success: function (json) { if (typeof(json) != "undefined" && typeof(json["rows"]) != "undefined") { for (var i = 0; i < json["rows"].length; i++) { var ids = json["rows"][i]["IDS"]; $("<div>", {"class": "layout-slider"}).css("width", "100%") .append($("<span>").css({display: "none"}).append($("<input>", {type: "text", name: "mindate",value:json["rows"][i]["STARTDATE"], id: "mindate" + i})))//開始時間表單,滑動滑動條時,動態改變 .append($("<span>").css({display: "none"}).append($("<input>", {type: "text", name: "maxdate",value:json["rows"][i]["ENDDATE"], id: "maxdate" + i}))) .append($("<span>", {"class": "layoutspan"}) .append($("<span>", {text: ids}).css("width", "100px").attr("Index",i)) .append($("<span>").css({display: "inline-block", width: "900px", padding: "0 5px"}).append($("<input>", {id: "Slider" + i, type: "slider", name: "area"})))) .appendTo(".layout") .append($("<span>").css({display: "none"}).append($("<input>", {id: "plandata" + i, type: "text", name: "plandataId",value:json["rows"][i]["ID"]}))); var maxDate=$("#maxdate"+i); var minDate=$("#mindate"+i); var v1 = getvalue(mindate, scale, to, json["rows"][i]["STARTDATE"]); var v2 = getvalue(maxdate, scale, to, json["rows"][i]["ENDDATE"]); $("#Slider" + i).attr("value", v1 + ";" + v2); $("#Slider" + i).slider({ from: 0, to: to, step: step, limits: false, smooth: true, range:true, round: 0, dimension: "", skin: "plastic" , calculate: function(value){ pre = (value+"").split(";")[0]; next = (value+"").split(";")[1]; //獲取當前進度條id,用以更新表單 var t =$(this)[0].inputNode[0].id; curSlider=t.substring(6,7) return calculate.call(this, value); }, onstatechange: function(value){ //當滑動條改變時,將起始時間更新到相應的計劃的表單 var mind = (value+"").split(";")[0]; var maxd = (value+"").split(";")[1]; var mind = calculate.call(this, mind); var maxd = calculate.call(this, maxd); $("#mindate"+curSlider).attr("value",mind); $("#maxdate"+curSlider).attr("value",maxd); window.console && console.log('curSlider: %s', curSlider); } });
$('span.layoutspan').contextMenu('myMenu1', { bindings: { 'edit': function(t) { var span=$(t).children(":first"); var idS=$(span).text(); var index =$(span).attr("Index"); $("#editPlandata").dialog({ title : "編輯計劃", modal : true, href : "/plans/editPlanData/" + idS+"?mindate="+min+"&maxdate="+max, top : $("#center").offset().top + 50, iconCls : "icon-save", width : 500, buttons : [ { text : '提交', id : 'submit1', handler : function() { $(t).empty(); $(t).attr("class","layout"); $(t).append($("<span>", {text: idS}).css("width", "100px").attr("Index",index)); $(t).append($("<span>").css({display: "inline-block", width: "900px", padding: "0 5px"}) .append($("<input>", {id: "Slider" + index, type: "slider", name: "area"}))); var startdata = $("#editPlandata input[name='startdate']").val(); var enddata = $("#editPlandata input[name='enddate']").val(); var v1 = getvalue(mindate, scale, to, startdata); var v2 = getvalue(maxdate, scale, to,enddata); $("#Slider" + index).attr("value",v1 + ";" + v2); $("#Slider" + index).slider({ from: 0, to: to, step: step, limits: false, smooth: true, range:true, round: 0, dimension: "", skin: "plastic" , calculate: function(value){ pre = (value+"").split(";")[0]; next = (value+"").split(";")[1]; //獲取當前進度條id,用以更新表單 var t =$(this)[0].inputNode[0].id; curSlider=t.substring(6,7) return calculate.call(this, value); }, onstatechange: function(value){ //當滑動條改變時,將起始時間更新到相應的計劃的表單 var mind = (value+"").split(";")[0]; var maxd = (value+"").split(";")[1]; var mind = calculate.call(this, mind); var maxd = calculate.call(this, maxd); $("#mindate"+curSlider).attr("value",mind); $("#maxdate"+curSlider).attr("value",maxd); window.console && console.log('curSlider: %s', curSlider); } }); $("#editPlandata").dialog("close"); var start = $("#editPlandata input[name=startdate]").val(); var end = $("#editPlandata input[name=enddate]").val(); var min="#mindate"+index; $("#mindate"+index).attr("value",start); $("#maxdate"+index).attr("value",end); } }, { text : '取消', iconCls : 'icon-cancel', handler : function() { $("#editPlandata").dialog("close"); } } ], close : function(event, ui) { $(this).dialog("close"); $(this).dialog("destroy"); } }); }
剛開始寫博客,有什麼不足之處,望各位給出意見,互相學習! ide