21

我有一个在 IE 和 Chrome 中运行良好的页面,但在 Firefox 和 Opera 中无法运行。当我说它不起作用时,我的意思是Submit按钮根本没有做任何事情。这是一个嵌套了几个页面和几个UpdatePanelsjQueryUI 手风琴的页面。

我有一个简单的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 找到有关该错误的任何信息。看来我正在做的事情应该很简单。

4

6 回答 6

33

这是一个旧帖子,但今天我仍然想到这个问题。我不想使用单击按钮,所以我尝试了 asetTimeout并且它也可以工作。

To people having this issue, try this solution:

setTimeout(function() { __doPostBack('DateButton', $('#txtDate').val()); }, 1);
于 2014-09-05T13:03:49.510 回答
5

最近不得不解决这个问题,我发现我可以通过将以下脚本添加到我的应用程序顶部来解决问题并让 __doPostBack 在 Edge、IE、Chrome 和 FireFox 中工作。

    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { window.event = {}; }    

使用SetTimeout函数会中断 Edge。只需放入window.event={}就破坏了 IE。

于 2018-06-15T09:25:23.787 回答
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");
        }
    }
});
于 2013-01-29T01:24:46.400 回答
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();
于 2018-04-16T09:30:24.007 回答
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

谢谢!

于 2021-01-14T17:15:58.613 回答
0

这在 Firefox Quantum 中发生在我身上。我使用的是 jQuery 3.x CDN,我必须下载它才能在我的项目中本地引用它。之后,我对其进行了编辑(jquery.3.x.min.js)并评论/删除了以下内容:

"use strict";

我不得不做一个search来删除它们。有两个。

于 2018-10-16T19:52:40.127 回答