我是Jquery的新手,但我在.NET 2.0项目中使用它,在13分钟不活动后将用户从系统中抽出时间。我有一个功能,基本上黑屏,给他们一个按钮吨继续工作。它已经工作了一段时间,但只能在“子”窗口内部工作,因为我实现它的方式。
我们在技术上并没有使用Master Pages,但我试图将代码嵌入到我们相当于母版页的内容中,而且我遇到了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设置为(#seconds)* 1000,表示总毫秒数 //在将弹出窗口发送给用户之前等待。 //你应该在会话超时前两分钟给用户回复, //例如超时15分钟,将其设置为13 * 60 * 1000 = 780000(~13分钟)。 var SESSION_TIME = 60000;
//用于测试会话是否已过期的全局变量。设置为true直到弹出窗口 //向用户显示。单击“继续”时重置。 var SESSION_ALIVE = true;
//确定弹出窗口的大小并调整位置 function popup_position(P_WIDTH,P_HEIGHT){ $(“#popup_window”)。css({marginLeft:' - '+ parseInt((P_WIDTH / 2),10)+'px',width:P_WIDTH +'px'}); }
//删除所有添加的对象并重新启动计时器 function popup_remove(){ $(“#popup_window”)。fadeOut(“fast”,function(){$('#popup_window,#popup_overlay')。trigger(“unload”)。unbind()。remove();}); // if(typeof document.body.style.maxHeight ==“undefined”){// if IE 6 $(“body”,“html”)。css({height:“auto”,width:“auto”}); $(“html”)。css(“overflow”,“”); //} window.setTimeout(“pop_init()”,SESSION_TIME); }
//来自按钮点击的会话ajax调用
function session_refresh(){
SESSION_ALIVE = true;
$( “按钮”。)隐藏()。
$(“#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);
}
//主弹出窗口处理程序 function pop_init(){ // show modal div $(“html”)。css(“溢出”,“隐藏”); $( “机构”)追加( “”); //$("#popup_overlay").click(popup_remove); //删除以确保用户单击按钮以继续会话。 $( “#popup_overlay”)addClass( “popup_overlayBG”)。 $( “#popup_overlay”)淡入( “慢”);
// 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);
}
//首先调用弹出窗口 $(window).load(function(){ window.setTimeout(“pop_init()”,SESSION_TIME); });
function popup_expired(){ if(!SESSION_ALIVE) //window.location.href =“login.asp”; //window.location.href =“default.aspx”; window.close; }
function replaceBadCharacters(){ //获取所有文本框和文本区域控件 $('input [type = text],textarea')。each(function(){ 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右侧引号 }); } //超时代码结束 // -------------------------------------------
//以下代码是在Case Entry / Edit页面上警告用户,如果他们点击某些链接,将保存案例 //(比如添加Notes,更改Collection Tables等) 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();
}
答案 0 :(得分:1)
你试过..
$(window).load(function() {
setTimeout( pop_init, SESSION_TIME );
});
这不会自动调用它。从语法上讲它是正确的。如果不这样做,问题可能在其他地方,可能在这段代码之上。
答案 1 :(得分:1)
好吧,在完全解构我的页面之后,直到我没有错误,然后重新构造它直到我发现错误,结果发现我们正在调用Utility.RegisterTypeForAjax方法,这显然需要AjaxPro.2我们使用的是旧版本的AjaxPro。我升级到AjaxPro.2并解决了错误。
现在我有了一个新问题。无论使用哪个子窗口,我的每个SESSION_TIME秒/分钟都会调用我的超时代码(pop_init)。我的超时代码是从我们的母版页版本调用的(但在技术上不是母版页),父窗口似乎没有认识到子窗口仍在使用中。对这一个有任何想法吗?
感谢Bryan,meder和Nick提供的所有精彩的帮助!
答案 2 :(得分:0)
它应该是这样的:
$(window).load(function() {
window.setTimeout(pop_init, SESSION_TIME);
});
虽然您的上一次尝试应该有效但是会产生不同的错误。它看起来像之前之前的那个(可能在包含的文件中)不是以;
终止的属性。查看代码并查看之前运行的最后一个JavaScript,包括通过<script>
标记包含的文件。要测试理论,请执行以下操作:
;$(window).load(function() {
window.setTimeout(pop_init, SESSION_TIME);
});
答案 3 :(得分:0)
在window.load中放置setTimeout是多余的,因为window.setTimeout将在window.load上运行。你不应该需要更多的东西:
window.setTimeout("pop_init()",SESSION_TIME); //Added quotes so function isn't immediately run
确保以正确的顺序声明SESSION_TIME和pop_init()。如果您遇到任何问题,很可能是在您的SESSION_TIME或pop_init()函数中。
编辑:确保您的session_time处于正确的数量级,SESSION_TIME = 3000超时为3秒。