我有一个在IE和Chrome中运行良好的页面,但在Firefox和Opera中不起作用。当我说它不起作用时,我的意思是Submit
按钮根本不做任何事情。它是一个页面上有几个嵌套的UpdatePanels
,还有几个jQueryUI Accordions。
我有一个简单的div
。
<div id="date-dialog" title="Date?">
<label id="lblDate" for="txtDate">
Please Enter Your The Date:
</label>
<input type="text" id="txtDate" class="text ui-widget-content ui-corner-all" />
</div>
然后我有一些简单的代码将它变成一个对话框:
$('#date-dialog').dialog({
autoOpen: false,
modal: true,
resizable: false,
buttons: {
"Submit": function () {
__doPostBack('DateButton', $('#txtDate').val());
},
"Cancel": function () {
$(this).dialog("close");
}
}
});
$('#txtDate').datepicker({ dateFormat: 'yy-mm-dd' });
我也试过添加这个,这没有帮助,实际上不适用于模态对话框:
open: function (type, data) {
$(this).parent().appendTo("form");
},
在Firefox中,我收到以下错误:
Error: TypeError: access to strict mode caller function is censored
Source File: http://ajax.microsoft.com/ajax/4.0/2/MicrosoftAjaxWebForms.debug.js
Line: 718
我不知道如何解决这个问题。我很想关掉strict mode
,但我找不到任何关于如何做到这一点的信息。我几乎无法使用Google找到有关该错误的任何信息。看起来我正在做的事情应该很简单。
答案 0 :(得分:28)
这是一个很老的帖子,但今天我仍然遇到这个问题。
我不想使用按钮的单击,所以我尝试了setTimeout
,它也有效。
对于遇到此问题的人,请尝试以下解决方案:
setTimeout(function() { __doPostBack('DateButton', $('#txtDate').val()); }, 1);
答案 1 :(得分:4)
最近不得不解决这个问题,我发现我可以解决问题,让__doPostBack在Edge,IE,Chrome&amp; FireFox将以下脚本添加到我的应用程序顶部。
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { window.event = {}; }
使用 SetTimeout 功能会破坏Edge。只需输入 window.event = {} 即可破坏IE。
答案 2 :(得分:1)
虽然这实际上并没有解释如何解决问题,但这是一种解决方法。
我创建了一个对应于对话框中每个字段的隐藏字段。然后我创建了一个按钮。这些必须保留在对话框div
之外,因为当div
被转到对话框时,$('#date-dialog').dialog({
autoOpen: false,
modal: true,
resizable: false,
buttons: {
"Submit": function () {
$('#<%=hfDate.ClientID %>').val($('#txtDate').val());
$('#<%=btnFormSubmit.ClientID %>').click();
$(this).dialog("close");
},
"Cancel": function () {
$(this).dialog("close");
}
}
});
被移动到表单外部。然后我修改了我的对话框创建代码,如下所示:
{{1}}
答案 3 :(得分:1)
适用于IE,Chrome和Firefox。浏览器!,感谢https://mnaoumov.wordpress.com/2016/02/12/wtf-microsoftajax-js-vs-use-strict-vs-firefox-vs-ie/
function hackEventWithinDoPostBack() {
var originalEventDescriptor = Object.getOwnPropertyDescriptor(Window.prototype, "event");
var hackEventVariable = false;
var eventPropertyHolder;
Object.defineProperty(window, "event", {
configurable: true,
get: function get() {
var result = originalEventDescriptor ? originalEventDescriptor.get.apply(this, arguments) : eventPropertyHolder;
if (result || !hackEventVariable)
return result;
return {};
},
set: function set(value) {
if (originalEventDescriptor)
originalEventDescriptor.set.apply(this, arguments);
else
eventPropertyHolder = value;
}
});
var originalDoPostBack = window.__doPostBack;
window.__doPostBack = function hackedDoPostBack() {
hackEventVariable = true;
originalDoPostBack.apply(this, arguments);
hackEventVariable = false;
};
}
hackEventWithinDoPostBack();
答案 4 :(得分:0)
这在Firefox Quantum中发生了。我使用的是jQuery 3.x CDN,我必须下载它才能在项目中本地引用它。之后,我对其进行了编辑(jquery.3.x.min.js)并注释/删除了以下内容:
"use strict";
我必须执行search
才能全部删除。有两个。
答案 5 :(得分:0)
这可能是个好消息,但我无法在最新的 Firefox 84.0.2 和 jQuery 3.5.1 中复制该问题。我测试了报告的场景以及与“严格使用”规则相关的其他 __doPostBack 有问题的场景,所有这些场景似乎都没有任何 JS 错误。
使用最新的 jQuery 3.5.1 和最新的 Firefox 84.0.2 是否仍然遇到此问题?
还有来自 jQuery 团队的官方声明,但它是旧的,适用于 jQuery 1.9.1,但不适用于 3.5.1 - https://bugs.jquery.com/ticket/13335。
谢谢!