这个过程非常好,只有一个例外。
我遇到了以下错误:
JavaScript运行时错误:在严格模式下不允许访问函数或参数对象的“caller”属性。
我已经确定了罪魁祸首。
__doPostBack('userControlSearchResults_results', LatLng);
内部具有以下内容:
function Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, eventArgument) {
var event = window.event;
if (!event) {
var caller = arguments.callee ? arguments.callee.caller : null;
if (caller) {
var recursionLimit = 30;
while (caller.arguments.callee.caller && --recursionLimit) {
caller = caller.arguments.callee.caller; // ERRORS HERE
}
event = (recursionLimit && caller.arguments.length) ? caller.arguments[0] : null;
}
}
...
我的第一反应是创建一个window.event,这样可以绕过if(!event)并继续执行。由于我们在代码中其他时间调用__doPostback也是成功的。
然而,由于我的JavaScript能力有限,我可能做错了或需要找到不同的方法。
我已经搜索了这个问题,但很少有结果返回。常见的回答是注释掉'use strict';然后继续。
问题是我们引入了很多JavaScript库,其中许多现在都设置为'use strict'。
有人有建议或想法如何解决这个问题吗?
一篇博客提到尝试在__doPostback调用之前应用setTimeout()。但我不知道那怎么解决任何问题。
编辑:添加了一些代码。
__doPostback在以下javascript中。
function CompleteSearch(returnedLatLng) {
if (returnedLatLng != '') {
alert("dopostback here2- this is where it breaks");
__doPostBack('ucSearchResults_udpResults', returnedLatLng);
if (document.getElementById("sidebar_search")) { document.getElementById("sidebar_search").style.display = "none" };
if (document.getElementById("sidebar_login")) { document.getElementById("sidebar_login").style.display = "none" };
if (document.getElementById("promo1")) { document.getElementById("promo1").style.display = "none" };
document.getElementById("sidebar_results").style.display = "block";
//document.getElementById("sidebar_results").style.display = "none";
}
return false;
}
我的更新面板位于用户控件中,看起来像这样...
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="Container" style="zoom:1" onclick="">
<asp:UpdatePanel runat="server" ID="udpResults" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<asp:HiddenField ID="currentLatLong" runat="server" />
<asp:HiddenField ID="triggerSearch" runat="server" Value="0" />
<asp:HiddenField ID="searchString" runat="server" Value="0" />
<asp:HiddenField ID="locationCode" runat="server" />
<asp:HiddenField ID="locationDesc" runat="server" />
<asp:HiddenField ID="locationPhone" runat="server" />
<asp:HiddenField ID="locationZip" runat="server" />
<asp:HiddenField ID="filterPickup" runat="server" />
<asp:HiddenField ID="filterVirtualKiosk" runat="server" />
<asp:HiddenField ID="filterDelivery" runat="server" />
<asp:HiddenField ID="filterAcceptsCash" runat="server" />
<asp:HiddenField ID="filterKey2Key" runat="server" />
<asp:HiddenField ID="filterHODService" runat="server" />
<asp:Label ID="tblResults" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
这个有用吗还是需要更多代码?我现在真的卡住了,不知道该怎么继续。