ejemplos according jquery asp.net postback jquery-ui-dialog

according - jQueryUI Dialog+Firefox+ASP.Net=el acceso a la función de llamador en modo estricto está censurado



tooltip jquery ejemplos (5)

Tengo una página que funciona muy bien en IE y Chrome, pero no funciona en Firefox y Opera. Cuando digo que no funciona, quiero decir que el botón Submit no hace nada en absoluto. Es una página con varios UpdatePanels anidados en ella y un par de Acordeones jQueryUI en ella también.

Tengo un div simple

<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>

Y luego tengo un código simple para convertirlo en un diálogo:

$(''#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'' });

También he intentado agregar esto, que no ayuda y que en realidad no funciona con un diálogo modal:

open: function (type, data) { $(this).parent().appendTo("form"); },

En Firefox me sale el siguiente error:

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

No tengo idea de qué hacer para solucionar este problema. Me encantaría desactivar el strict mode , pero no puedo encontrar ninguna información sobre cómo hacerlo. Apenas puedo encontrar información sobre ese error usando Google. Parece que lo que estoy haciendo debería ser bastante simple.


Este es un tipo de publicación antigua, pero este problema se me ocurrió hoy. No quería usar el clic del botón, así que en lugar de eso probé un setTimeout y también funciona.

Para las personas que tienen este problema, pruebe esta solución:

setTimeout(function() { __doPostBack(''DateButton'', $(''#txtDate'').val()); }, 1);


Esto está funcionando para IE, Chrome y Firefox. ¡navegador !, gracias a 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();


Esto me sucedió en Firefox Quantum. Estaba usando un CDN de jQuery 3.x, tuve que descargarlo para hacer referencia localmente en mi proyecto. Después de eso lo edité (jquery.3.x.min.js) y comenté / eliminé lo siguiente:

"use strict";

Tuve que hacer una search para eliminarlos a todos. Había dos.


Habiendo tenido que abordar este problema recientemente, encontré que podía resolver el problema y hacer que __doPostBack funcionara en Edge, IE, Chrome y FireFox agregando el siguiente script a la parte superior de mi aplicación.

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

El uso de la función SetTimeout rompe Edge. Simplemente poniendo en window.event = {} rompió IE.


Si bien esto no explica realmente cómo solucionar el problema, se trata de una solución alternativa.

Creé un campo oculto que correspondía a cada campo en el cuadro de diálogo. Entonces creé un botón. Debían mantenerse fuera del cuadro de diálogo div porque el div se mueve fuera del formulario cuando se convierte en un cuadro de diálogo. Luego modifiqué el código de creación de mi cuadro de diálogo para que fuera algo como esto:

$(''#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"); } } });