1. 程式人生 > >JS暫停函式(類似java中的sleep)

JS暫停函式(類似java中的sleep)

        開發需求:一個修改產品資訊的頁面,需要從資料庫讀取資料到頁面,然後JSP動態顯示。頁面中有一個下拉列表,這個列表也需要從資料庫中讀取,並且需要根據產品中的分類欄位讓下拉表預設選中相應的元素。

        開發思路:當用戶請求跳轉這個頁面時-->控制器接受請求,然後呼叫業務層取得產品資料-->返回給JSP頁面-->頁面中使用Ajax技術傳送一個請求到控制器-->控制器取得產品分類資料-->返回給頁面-->在頁面中取得產品分類的id,通過js函式比對<select>中<option>的value屬性,判斷是否相等,如果相等則預設選中。(產品和產品分類為2張不同的表)

        這個過程中遇到的最大的問題是:Ajax返回資料 和 js比對資料的時序性問題。JS函式比對資訊必須在Ajax請求完成且伺服器端發出響應後,而寫JS程式碼測試的時候反覆重新整理偶爾才能獲取到預設值,這不是我想要的效果。此問題的解決方案是:讓這個onload的JS函式在執行過程中暫停XX毫秒,然後再繼續,下面直接帖程式碼:

//js暫停函式  
function Pause(obj,iMinSecond){   
   if (window.eventList==null) window.eventList=new Array();   
   var ind=-1;   
   for (var i=0;i<window.eventList.length;i++){   
       if (window.eventList[i]==null) {   
         window.eventList[i]=obj;   
         ind=i;   
         break;   
        }   
    }   
   if (ind==-1){   
   ind=window.eventList.length;   
   window.eventList[ind]=obj;   
   }   
  setTimeout("GoOn(" + ind + ")",iMinSecond);   
}   
  
//js繼續函式  
function GoOn(ind){   
  var obj=window.eventList[ind];   
  window.eventList[ind]=null;   
  if (obj.NextStep) obj.NextStep();   
  else obj();   
}

呼叫過程為:
//選中系統分類
function checkSystemIdentity(param)
{	
	Pause(this,100);
	this.NextStep = function(){
		
		var	systemTypes = document.getElementById('systemType');
	
		for(i=0;i<systemTypes.options.length;i++){
			var temp = systemTypes[i].value;
			if(temp ==param){
				systemTypes[i].selected="true";
			}
		}
	}
}