我是Jquery的新手,但我在.NET 2.0項目中使用它來在我們的用戶閒置13分鐘後離開系統。我有一個功能,基本上屏幕黑屏,並給他們一個按鈕噸繼續工作。它已經工作了一段時間,但只適用於「孩子」窗口,因爲我實現它的方式。window.load上的JQuery錯誤()
我們沒有在技術上使用母版頁,但我試圖將代碼嵌入到母版頁的等價物中,而且我遇到了javascript錯誤。有問題的代碼是:
$(window).load() {
window.setTimeout("pop_init()", SESSION_TIME);
}
我得到的錯誤是一個「;」是期待。我已經試過:
$(window).load() {
window.setTimeout("pop_init()", SESSION_TIME);
};
,也試過:
$(window).load(function() {
window.setTimeout("pop_init()", SESSION_TIME);
});
都具有相同的結果。預先感謝您的時間和任何可能的建議!
這裏是我的pop_init函數的代碼:
function pop_init() {
// show modal div
$("html").css("overflow", "hidden");
$("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>");
//$("#popup_overlay").click(popup_remove); // removed to make sure user clicks button to continue session.
$("#popup_overlay").addClass("popup_overlayBG");
$("#popup_overlay").fadeIn("slow");
// build warning box
$("#popup_window").append("<h1>Warning</h1>");
$("#popup_window").append("<p id='popup_message'>Your session is about to expire. Please click the button below to continue working without losing your session.</p>");
$("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'><img src='images/green-checkmark.png' alt=''/> Continue Working</button></center></div>");
// attach action to button
$("#continue").click(session_refresh);
// display warning window
popup_position(400, 300);
$("#popup_window").css({ display: "block" }); //for safari using css instead of show
$("#continue").focus();
$("#continue").blur();
// set pop-up timeout
SESSION_ALIVE = false;
window.setTimeout("popup_expired()", 1000);
}
嗯,我確信,所有相關功能都位於現在稱他們上面的代碼,而我仍然得到同樣的錯誤,所以我很茫然。奇怪的是,我的覆蓋層淡入,然後錯誤被拋出 - 但我的彈出式繼續按鈕從不顯示。所以這就好像錯誤在疊加層和#popup_window結構之間。我附上完整的.js文件。還有一些與此無關的其他功能,但是用於系統的另一部分,但爲了完整性以及可能存在某種干擾的可能性,我將它們包括在內:
//以下代碼用於處理會話超時 //用於設置重複會話超時呼叫的全局變量。 //將SESSION_TIME設置爲(#秒)* 1000,並在向用戶發送彈出窗口之前等待總毫秒數 //等待。 //您應該在會話超時前兩分鐘給用戶回覆, //例如對於15分鐘超時,將其設置爲13 * 60 * 1000 = 780000(〜13分鐘)。 var SESSION_TIME = 60000;
//用於測試會話是否已過期的全局變量。設置爲true,直到彈出菜單 //顯示給用戶。點擊繼續時重置。 var SESSION_ALIVE = true;
//確定彈出窗口的大小和位置調整功能 popup_position(P_WIDTH,P_HEIGHT){ $( 「#popup_window」)的CSS({marginLeft: ' - ' + parseInt函數((P_WIDTH/2),10 )+'px',寬度:P_WIDTH +'px'}); }
//刪除所有添加的對象,並重新啓動定時器 功能popup_remove(){ $( 「#popup_window」)。淡出( 「快」,函數(){$( '#popup_window,#popup_overlay') .trigger(「unload」)。unbind()。remove();}); (if)(typeof document.body.style.maxHeight ==「undefined」){// IE 6 $(「body」,「html」)。css({height:「auto」,width:「auto 「}); (「html」)。css(「overflow」,「」); //} 窗口。setTimeout(「pop_init()」,SESSION_TIME); }
// session button ajax call from button click function session_refresh(){ SESSION_ALIVE = true; (「。buttons」)。hide(); (「#popup_message」)。html(「
謝謝!您現在可以恢復使用系統了。
」); window.setTimeout(「popup_remove()」,300); ()「);}}; $(」#popup_window「)。fadeOut(」slow「,function(){$('#popup_window,#popup_overlay')。trigger(」unload「)。unbind()。remove();}); window.setTimeout(「pop_init()」,SESSION_TIME); }
//主彈出窗口處理函數 pop_init(){// 顯示模式DIV $( 「HTML」)的CSS( 「溢出」, 「隱藏」)。 $(「body」)。append(「」); //$("#popup_overlay").click(popup_remove); //刪除以確保用戶點擊按鈕繼續會話。 $(「#popup_overlay」)。addClass(「popup_overlayBG」); $(「#popup_overlay」)。fadeIn(「slow」);
// build warning box
$("#popup_window").append("<h1>Warning</h1>");
$("#popup_window").append("<p id='popup_message'>Your session is about to expire. Please click the button below to continue working without losing your session.</p>");
$("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'><img src='images/green-checkmark.png' alt=''/> Continue Working</button></center></div>");
// attach action to button
$("#continue").click(session_refresh);
// display warning window
popup_position(400, 300);
$("#popup_window").css({ display: "block" }); //for safari using css instead of show
$("#continue").focus();
$("#continue").blur();
// set pop-up timeout
SESSION_ALIVE = false;
window.setTimeout("popup_expired()", 1000);
}
//第一次調用彈出窗口 $(窗口).load(函數(){ window.setTimeout( 「pop_init()」,SESSION_TIME); });
function popup_expired(){ if(!SESSION_ALIVE) //window.location.href =「login.asp」; //window.location.href =「default.aspx」; window.close; }
功能replaceBadCharacters(){// 獲取所有文本框和文本區控制 $( '輸入[類型=文本],文本區域')。每個(函數(){ VAR txtobj = $('# '+ this.id); txtobj.attr(「value」,txtobj.attr(「value」)。replace(new RegExp(String.fromCharCode(8216),「g」),String.fromCharCode(39))) ; // Microsoft Word左側撇號 txtobj.attr(「value」,txtobj.attr(「value」)。replace(new RegExp(String.fromCharCode(8217),「g」),String.fromCharCode(39) )); // Microsoft Word右側撇號 txtobj.attr(「value」,txtobj.attr(「value」)。replace(new RegExp(String.fromCharCode(8220),「g」),「'」) ); // Microsoft Word左側引號 txtobj.attr(「value」,txtobj.attr(「value」)。replace(new RegExp(String.fromCharCode(8221),「g」),「'」)); // Microsoft Word右側引號 }); } //超時結束代碼 // -------------------------------------- -----
//下面的代碼是警告案例項目/編輯頁面上,如果他們點擊某些鏈接 //這種情況下,將保存用戶(想補充說明,改變收集表等) var calling_obj;
// call from cancel button click
function save_abort() {
popup_remove();
}
// call from continue button click
function save_continue() {
//alert(calling_obj.id);
__doPostBack(calling_obj.id, '');
popup_remove();
}
function warn_save(obj) {
// show modal div
//alert(obj.id);
$("html").css("overflow", "hidden");
$("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>");
$("#popup_overlay").addClass("popup_overlayBG");
$("#popup_overlay").fadeIn("slow");
// build warning box
$("#popup_window").append("<h1>Save Case?</h1>");
$("#popup_window").append("<p id='popup_message'><center>Navigating away from the current page will automatically save this Case. Do you want to continue?</center></p>");
$("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'><img src='images/green-checkmark.png' alt=''/>Yes</button> <button id='cancel' class='positive' type='submit' alt=''><img src='images/delete.png' alt=''/>No</button></center></div>");
// attach action to button
$("#continue").click(save_continue);
calling_obj = obj;
$("#cancel").click(save_abort);
// display warning window
popup_position(400,300);
$("#popup_window").css({display: "block"}); //for safari using css instead of show
$("#continue").focus();
$("#continue").blur();
}
// Case Entry div expand/close functions
function close_div_acct() {
$("#div_acct").hide();
}
SESSION_TIME是我聲明的第一個var,然後聲明第二個var,接着是我的window.load函數,接着是pop_init()。這不正確的順序嗎?我知道毫秒時間,即使將SESSION_TIME設置爲60000,我也會立即顯示覆蓋圖。 – Mike 2010-08-25 18:35:29
@Mike: pop_init()應該在window.load之前聲明。另外,你只是宣佈SESSION_TIME還是你分配?這聽起來像你以後分配它作爲你的pop_init()正在運行,但時間不起作用。你有沒有試過將一個值硬編碼到setTimeout中,看看它是否有效? – 2010-08-25 18:38:39
@Bryan,謝謝!我完全沒有想到在文件中的位置 - 談論新手的錯誤! DOH!所以我想,同樣,從pop_init調用的popup_position函數需要在* pop_init之前聲明*等等。 – Mike 2010-08-25 18:48:08