从Microsoft Blog找到解决方案...见下文
好的,开始我不喜欢随机这个词,但我在这个问题的测试用例中找不到任何关联,所以我将使用随机来描述这个问题的部分内容。
设置:我有一个列表,其中我为EditForm.aspx和NewForm.aspx创建了一个自定义UI。我在其中两个之间使用相同的JS文件和JavaScript。我已添加到谷歌地图,以帮助说明位置选择。我已经为" OK"添加了额外的代码。用于某些动态验证的按钮。我也做了很多动态菜单。所有用户都使用IE 9,该站点位于MOSS 2007服务器上。
问题:仅在EditForm.aspx上,单击OK" Randomly"导致立即白屏。表单未保存,在查看白色屏幕的源代码时,我找到一个空白的html页面。
我试图找到这个问题: - 我试图缩小用户和计算机的范围,发现它发生在每台计算机上的每个人身上(再一次"随机")。 - 我尝试禁用预先设置为" OK"按键 - 我尝试使用IE9的外部脚本调试代码,发现没有错误
我可以提供代码,但它有点长,我真的不知道从哪里开始。所以如果需要,我可以提供它。
提前感谢您的帮助。
编辑: 这是代码重新连接我的OK按钮(我将值重置为"保存"之前)
var okBtns = $('input[value="Save"]')
$.each(okBtns, function(index,value){
okFunction=$(value).attr('onclick');
$(value).attr('onclick','return false;')
$(value).bind('click', function(){
if ($('#'+StatusBox).val()=='Draft') {$('#'+StatusBox).val('New Request')}
var err = clickOKbutton();
if(err==0) {okFunction()};
});
});
这是clickOKbutton函数,它是代码前置于orgianal sharepoint操作的代码:
function clickOKbutton()
{
//all of the imput validation i could ever wish for!!!!
var NoteVal = ''
var NameAry = $('#'+PersonnelBox).parent().children(":first").children("SPAN").children("SPAN");
$.each(NameAry, function(index,value){
var $n=$(value).html();
if(NoteVal.length==0) {NoteVal=$n} else {NoteVal=NoteVal+';'+$n};
});
//$('#'+AddNotes).val(NoteVal);
var plh = $('#'+PersonnelBox).parent().html()
userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','');
$.each(OICUsers, function(i,v){
if(plh.indexOf(v) > -1 && st=='New Request'){
$('#'+StatusBox).val('OIC Bypassed')
$('#'+CommentsBox).val('OIC is travling on this TDY/TAD and cannot approve. So this request is bypassing the "OIC Approval" step')
}
});
/*userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','')
$('#' + ModBox).closest('TR').show();*/
var message=''
message = detectFieldChanges(AllFieldsArray,AllOrgValArray,"Draft,New Request,Modified")
if(message.length>0){
$('#'+ModBox).val(message);
AutoResizeTextarea(ModBox);
}
message = detectFieldChanges(ValFieldsArray,OrgValuesArray,"Draft,New Request,Modified,OIC Approved,OIC Bypassed,Pending RFI,Ready for COS")
userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','');
if(message.length>0&&$.inArray(userNameTx,COSUsers)==-1){
$('#'+StatusBox).val('Modified').change;
$('#'+StatusLongBox).val('Modified').change;
}
//Subject box
var pb = NoteVal;
var ep = $('#'+ExtPersonnel).val();
var ab = $('#'+AddressBox).val();
var sd = $('#'+sDateBox).val();
var ed = $('#'+eDateBox).val();
var st = $('#'+StatusBox).val();
var p = pb+';'+ep;
var p = p.replace(/mossaspnetmembershipprovider:/g,'');
var p = p.slice(0,-1);
var ad = ab+' '+sd+' to '+ed;
var s = 'eTDY | '+st+' - '+p+' - '+ad;
if(s.length>255){
var l = s.length-255;
p = p.substring(0,p.length-l);
s = 'eTDY | '+p+' - '+ad;
}
$('#'+Subject).val(s);
//check Lat/Lng value
if($('#'+LatBox).val()=='' || $('#'+LngBox).val()==''){
//alert("Cannot continue unless the Lat Lng has a vallid coordinate");
if($('#LatLngError').length==0){
errorHTML='<br><span class="ms-error" id="LatLngError">You must specify a value for Lat and Lng</span>'
$('#'+AddressBox).closest('TD').append(errorHTML)
}
return -1
}
return 0
};
这很乱,但希望你能理解它。
编辑2:
我认为我已经跟踪了随机性......我完全关闭了所有自定义代码,但仍然存在问题。然后我尝试将工作记录与非工作记录进行比较。一切都看起来很正常,直到我带着一个多人选择器到达现场。如果我在该字段中有超过2个人,它将保存正常,但是当我在人员选择器字段中超过2个人对该记录进行修改时会导致此问题。我将做更多的研究,并将发布我的结果。
编辑3:
http://blogs.msdn.com/b/jorman/archive/2009/12/22/mystery-of-the-sharepoint-white-screens.aspx
这个问题都归结为IIS配置和模拟级别。显然我们的服务器管理员决定在不告诉任何人的情况下进行更改。
答案 0 :(得分:0)
通常,当您从网页(特别是在MOSS中)获得[看似随机]行为时,这意味着您在页面上定义了模糊事件。通常,当我向按钮或表单on_submit添加某种JScript时,我会得到这个 在没有看到你的代码的情况下,我无法真正缩小范围。我建议:在HTML表单或按钮单击事件上查找JavaScript事件,或者查找指向无处的锚[a]标记(href =#)但是有javascript。然后决定(严格地)HTML方式(表单,提交按钮)或javascript方式(没有表单,没有asp:按钮)和取消另一个连接。
答案 1 :(得分:0)
这个问题都归结为IIS配置和模拟级别。显然我们的服务器管理员决定在不告诉任何人的情况下进行更改。
http://blogs.msdn.com/b/jorman/archive/2009/12/22/mystery-of-the-sharepoint-white-screens.aspx