jquery - metodo - el objeto no permite esta propiedad o método
Obteniendo error: el objeto no admite la propiedad o el método ''asignar'' (9)
Estoy usando este plugin jquery popup desde este enlace en mi sitio de WordPress. Funciona bien en todos los navegadores pero da el siguiente error en IE11.
Cualquier ayuda es muy apreciada.
@ Andres-Ilich tiene la respuesta correcta a su pregunta, pero usted está haciendo la pregunta incorrecta:
¿Por qué no utilizar un plugin jQuery que sea compatible con IE como Reveal excelente de Zurb ?: https://github.com/zurb/reveal
Hará todo lo que quiera y no arrojará este error.
@John Doe
Descubrí por tu comentario que quieres implementar esto en la pila node / react. Esto es muy diferente de la pregunta original y deberías haberte hecho la tuya propia;)
De todos modos, aquí está lo que tienes que hacer ...
Puede usar [es6-object-assign] [1]. Es un ES6 Object.assign () "polyfill".
Primero, en package.json
en su carpeta raíz, agregue es6-object-assign
como dependencia:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
Luego, si desea usarlo en el entorno del nodo, use:
require(''es6-object-assign'').polyfill();
Si tiene el problema en el extremo frontal (navegador) ...
Agréguelo en su archivo index.html ...
<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script>
<script>
window.ObjectAssign.polyfill();
</script>
location_of_node_modules
depende de la plantilla que utilizas, en su mayoría solo node_modules
, pero a veces cuando index.html está en un subdirectorio necesitas usar, ../node_modules
Actualmente estoy trabajando en una ventana emergente jQuery: https://github.com/seahorsepip/jPopup
Tiene todo lo que esperarías de una ventana emergente y más: D
De todos modos, volviendo al tema, actualmente estoy escribiendo la versión 2, que es una gran reescritura y agrega soporte para IE6 (la versión 1 era IE7 +) y me encontré con un error similar ...
Código original que dio el error en IE6:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div style=/"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;/"></div>");
El truco que tuve que idear:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div>");
this._vars.fakeScrollbar.html("<div style=/"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;/"></div>");
this._vars.fakeScrollbar = this._vars.fakeScrollbar.children();
Básicamente, Object.assign
no es compatible con todos los navegadores, sin embargo, es posible volver a asignarlo en caso de que no sea compatible con el navegador actual.
Es una práctica para realizar una función de relleno, que se comporta de la misma manera que Object.assign(target, ...)
de ES6.
Creo que la mejor solución es repetir cada argumento después del target
, asignar cada propiedad de los objetos de los arguments
al target
, considerando una iteración entre objetos y matrices, para evitar la creación de referencias. Opcionalmente, para no perder instancias, puede detectar si la última instancia de la propiedad es solo igual a "Array"
u "Object"
, y al hacerlo no perderá una interfaz de Image
(por ejemplo) si planea crear nuevas referencias , pero los objetos con estas instancias seguirán siendo referencia.
Editar : el Object.assign
original no funciona de esta manera.
De acuerdo con esta solución, tengo mi propio relleno que se puede encontrar here .
Como etiquetó la pregunta con jQuery, puede usar la función jQuery extend . No es necesario un relleno de poliuretano y también se fusiona en profundidad.
Por ejemplo:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend( object1, object2 );
Resultado:
{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}
Como otros han mencionado, el método Object.assign() no es compatible con IE, pero hay un polyfill disponible, simplemente inclúyalo "antes" de su declaración de plugin:
if (typeof Object.assign != ''function'') {
Object.assign = function(target) {
''use strict'';
if (target == null) {
throw new TypeError(''Cannot convert undefined or null to object'');
}
target = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source != null) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
}
Desde Object.assign()
Página de prueba: http://jsbin.com/pimixel/edit?html,js,output (simplemente elimine el polyfill para obtener el mismo error que está obteniendo en su página).
Estos errores generalmente ocurren cuando algún ID de elemento html tiene el mismo ID que una variable en la función de JavaScript. Después de cambiar el nombre de uno de ellos código trabajado.
Fuente: SCRIPT438: el objeto no admite propiedad o método IE
Otro enlace: validación jquery IE Object no admite propiedad
Según la documentación, Object.assign () es una nueva tecnología, parte de la norma ECMAScript 2015 (ES6)
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign
Y, no es compatible con IE.
Una posible solución para este problema:
Agregue el script legacy.min.js antes de custombox.min.js
fuente: proyecto custombox github