window.load()上的jQuery错误

时间:2010-08-25 17:07:09

标签: jquery

我是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>&nbsp;<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();
}

4 个答案:

答案 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秒。