jQueryUI Dialog + Firefox + ASP.Net =访问严格模式调用函数被审查

cjb*_*rth 18 asp.net jquery postback jquery-ui-dialog

我有一个在IE和Chrome中运行良好的页面,但在Firefox和Opera中不起作用.当我说它不起作用时,我的意思是Submit按钮根本不做任何事情.它是一个有几个嵌套的页面,还有几个UpdatePanelsjQueryUI 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>
Run Code Online (Sandbox Code Playgroud)

然后我有一些简单的代码将它变成一个对话框:

$('#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' });
Run Code Online (Sandbox Code Playgroud)

我也试过添加这个,这没有帮助,实际上不适用于模态对话框:

    open: function (type, data) {
        $(this).parent().appendTo("form");
    },
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做才能解决这个问题.我想关掉strict mode,但我找不到任何关于如何做到这一点的信息.我几乎无法使用Google找到有关该错误的任何信息.看起来我正在做的事应该很简单.

Ped*_*eca 28

这是一个很老的帖子,但今天我仍然遇到这个问题.我不想使用按钮的单击,所以我尝试了setTimeout它,它也有效.

对于遇到此问题的人,请尝试以下解决方案:

setTimeout(function() { __doPostBack('DateButton', $('#txtDate').val()); }, 1);
Run Code Online (Sandbox Code Playgroud)


use*_*298 5

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

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

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


cjb*_*rth 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");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)