Erreur: cet Objet ne gère pas la propriété ou de la méthode 'attribuer'
Je suis en utilisant ce jquery popup plugin à partir de ce lien sur mon site WordPress. Il fonctionne sur tous les navigateurs, mais en lui donnant le message d'erreur suivant sur IE11.
- pouvez-vous fournir un exemple?
- s'il vous plaît mettez votre code afin que nous puissions juger de ce qui est en question... mon être qu'il est question avec l'élément dom ne trouve pas ou ont le même id plusieurs fois sur la page.
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont mentionné, le Objet.assign() méthode n'est pas pris en charge dans IE, mais il y a un polyfill disponible, il suffit d'inclure ce "avant" votre plugin déclaration:
De https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Page de Test: http://jsbin.com/pimixel/edit?html,js,sortie (il suffit de retirer le polyfill pour obtenir le même message d'erreur que vous obtenez sur votre page).
!=
au lieu de la sécurité!==
?@John Doe
J'ai compris de votre commentaire que vous souhaitez mettre en node/réagir de la pile. C'est très différent de la question initiale et vous devriez avoir demandé à votre propre 😉
De toute façon, Voici ce que vous devez faire...
Vous pouvez utiliser [es6-objet-assigner][1]. C'est un ES6 Objet.assign() "polyfill".
Tout d'abord, dans
package.json
dans votre dossier racine, ajouteres6-object-assign
comme une dépendance:Alors si vous voulez l'utiliser dans le nœud de l'environnement utilisation:
Si vous avez de la question sur le devant (navigateur) fin...
L'ajouter dans votre index.html fichier...
location_of_node_modules
dépend standard que vous utilisez, surtout justenode_modules
, mais parfois, quand index.html est dans un sous-répertoire, vous devez utiliser,../node_modules
Que par la documentation, de l'Objet.assign() est une nouvelle technologie, une partie de l'ECMAScript 2015 (ES6) standard:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Et il n'est pas pris en charge par IE.
Une solution possible à ce problème:
source: custombox projet github
@Andres-Ilich a le droit de répondre à votre question, mais vous vous posez la mauvaise question:
Pourquoi ne pas simplement utiliser un plugin jQuery qui prend en charge IE comme Zurb excellent Révéler: https://github.com/zurb/reveal
Il va faire tout ce que vous voulez et ne pas jeter cette erreur.
Actuellement en train de travailler sur un jQuery popup moi-même:
https://github.com/seahorsepip/jPopup
A tout ce que vous attendez d'une popup et plus 😀
De toute façon revenir au sujet, je suis actuellement à la rédaction de la version 2, qui est un grand réécriture et ajoute le support de IE6 (la version 1 a été IE7+) et a couru dans une semblable erreur...
Code d'origine qui a donné l'erreur dans IE6:
Le hack, j'ai dû venir avec:
Puisque vous tagged la question avec jQuery, vous pouvez utiliser le jQuery étendre fonction. Pas besoin d'un polyfill et il n'profond de fusion ainsi.
Par Exemple:
Résultat:
Ces erreur se produit généralement lorsque certains id de l'élément html a le même id que certaines variables dans la fonction JavaScript. Après la modification du nom de l'un d'entre eux code travaillé.
Source : SCRIPT438: Objet ne prend pas en charge la propriété ou de la méthode IE
Autre lien : jquery validation IE Objet ne prend pas en charge la propriété
Fondamentalement,
Object.assign
n'est pas pris en charge par tous les navigateurs, cependant, il est possible de ré-affecter àObject
cas, il n'est pas pris en charge par le navigateur actuel.C'est pratique pour faire un polyfill de la fonction, qui se comporte de la même manière que
Object.assign(target, ...)
de l'ES6.Je pense que la meilleure solution est de parcourir chaque argument après
target
, d'attribuer à chaque propriété dearguments
objets àtarget
, compte tenu d'une itération entre les objets et les tableaux, afin d'éviter la création de références. Éventuellement, pour pas les perdre en cas, vous pouvez détecter si la dernière instance de la propriété est seulement égale à"Array"
ou"Object"
, et ce faisant, vous n'aurez pas perdu unImage
interface d'e.g) si vous envisagez de créer de nouvelles références, mais des objets avec ces instances seront toujours de référence.Modifier: l'original
Object.assign
ne fonctionne pas de cette façon.Selon cette solution, j'ai mon propre polyfill qui peut être trouvé ici.
Réagir solution pour IE11
Concernant shramee réponse, qui dit quelque chose comme ceci:
Ce polyfill a été mis à jour et de faire les choses un peu différemment maintenant:
dans
package.json
dans votre dossier racine, ajouteres6-object-assign
comme une dépendance (exécutionnpm i
dans une ligne de commande après):Ou exécutez simplement:
npm i --save es6-object-assign
De l'utiliser dans un nœud de l'environnement:
Pour l'utiliser dans votre index.html, il suffit d'ajouter le automatique polyfill fichier JS référence (si vous avez des scripts dans le
<body>
qui l'invoque,Object.assign()
, vous pouvez l'ajouter à la fin de la<head>
élément).Invoquant directement à partir de
node_modules
:location_of_node_modules
dépend de votre projet de la structure (quand index.html est dans un sous-répertoire que vous pourriez avoir besoin:../node_modules
).Cependant, ce pourrait n'avez pas travaillé pour vous (en raison de
node_modules
dossiers d'accès, par exemple, vous utilisez créer-réagir-app). Si oui, il suffit de copier le fichier JS à partir de ladist/
dossier node_modules à lapublic/
dossier et puis:Vous pouvez utiliser la non-minifiés fichier et ajouter des polyfills (par exemple
startsWith
).veuillez ajouter un script
de fichier html à résolu ce problème.