Uncaught TypeError: Impossible de lire la propriété 'msie' d'undefined - jQuery Tools

190

J'obtiens l'erreur suivante dans la console de développement Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

Je crois comprendre que c'est parce qu'il .browserest maintenant obsolète dans jQuery, mais j'utilise la dernière version des outils jQuery et cela donne toujours l'erreur, j'ai vérifié le jsfichier et il est là.

Comment puis-je contourner ce problème pour qu'il ne donne pas l'erreur?

Colin747
la source
1
cette erreur est insuffisante. De quel élément essayez-vous de lire ceci?
Siddharth Gupta
Je n'ai pas du tout utilisé .browserdans mon code. Il semble le détecter dans le fichier des outils jQuery.
Colin747
6
L' browserobjet n'est pas seulement obsolète dans la version 1.9, il a disparu . Si jQuery Tools l'utilise toujours, alors jQuery Tools est cassé.
Pointy
1
@Alexander qui semblait se débarrasser de l'erreur. Vous pouvez mettre une réponse si vous le souhaitez.
Colin747
3
Les derniers outils jQuery n'ont été testés qu'avec jQuery 1.7. jQuery 1.9 n'est pas compatible avec la dernière version de jQuery Tools; c'est si simple. Dump jQuery Tools ou rétrograder jQuery vers une version inférieure à 1.9 qui fonctionne. Sinon, ne vous attendez pas à ce que quiconque mette à jour jQuery Tools, c'est sans développeur depuis quelques années.
Sparky

Réponses:

189

La $.browserméthode a été supprimée depuis jQuery 1.9.

jQuery.browser() removed

La jQuery.browser()méthode est obsolète depuis jQuery 1.3 et est supprimée dans la version 1.9. Si nécessaire, il est disponible dans le cadre du plugin jQuery Migrate. Nous vous recommandons d'utiliser la détection de fonctionnalités avec une bibliothèque telle que Modernizr.

- Guide de mise à niveau de jQuery Core 1.9 .

Comme indiqué dans le Guide de mise à niveau, vous pouvez essayer d'utiliser le plugin jQuery Migrate pour restaurer cette fonctionnalité et laisser les outils jQuery fonctionner.

Alexandre
la source
242

Vous pouvez consulter cette solution par AJ. C'est assez simple, copiez et collez simplement les lignes de code suivantes.

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

Référence :

JrBriones
la source
4
Cela fonctionne parfaitement! Mais je suppose que cela devrait être utilisé comme un patch, plutôt qu'une solution, non?
Jobokai
Merci d'utiliser un plugin jquery qui l'utilisait et c'était une solution simple à court terme jusqu'à ce qu'un vrai correctif soit déployé.
Joe Meyer
Merci. Cela a corrigé Query Tools v1.2.7, puisque nous avons mis à niveau JQuery vers la dernière version.
bsentosa
1
WOW, si je pouvais vous donner 10 avantages, je le ferai tout de suite.
Iman Hejazi
9
Cette réponse n'est plus correcte, car IE11 n'a pas le jeton MSIE dans la userAgentchaîne.
Dave Methvin
47

Utilisez la balise de script suivante dans votre fichier jsp / js:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

cela fonctionnera à coup sûr.

Manisha Srivastava
la source
assurez-vous que votre connexion Internet fonctionne. Si vous utilisez hors ligne, téléchargez le fichier js de votre côté, puis faites référence à ce fichier.
Manisha Srivastava
Eh bien, je peux voir qu'il est hébergé en ligne ... de toute façon merci je l'ai résolu avec jquery.noConflict () car j'avais deux versions de jquery utilisées sur la même page.
Prerit Mohan
@ User5590: à tout moment :)
Manisha Srivastava
Ne devrait pas utiliser jquery non minifié en production: consultez cdnjs.com par exemple. Et utilisez plutôt HTTPS.
Takman
27

J'utilise le code ci-dessous après l'inclusion du fichier js et cela fonctionne maintenant.

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>
Atik Khan
la source
Ce lien de lien me donne une erreur, mais ce petit morceau de code que vous avez écrit m'a beaucoup aidé, merci mec.
Saman le
7

Voici le bogue des outils jQuery sur GitHub . Vous pouvez essayer l'un des correctifs.

edit - il ne me semble pas que jQuery Tools reçoive beaucoup de soutien. Personnellement, je ne commencerais pas un nouveau projet avec une dépendance sur cette bibliothèque à moins que je ne sois prêt à prendre en charge le soutien moi-même.

Pointu
la source
1
+1, jQuery Tools a été un désordre complet ces dernières années. Que ce ne soit pas "obtenir beaucoup de soutien" est très précis et un euphémisme énorme. Je pense qu'il n'y a eu qu'une seule mise à jour mineure depuis jQuery 1.3 et aucun développeur au cours des deux dernières années également.
Sparky
D'accord, quelqu'un a-t-il une recommandation pour une bibliothèque de remplacement? Quelque chose avec un curseur, une superposition et un curseur d'entrée de plage? J'évite jQuery mobile car il est pré-stylé. Je l'ai déjà stylé et c'est un cauchemar.
inorganik
5
Je suis passé à la recherche de bibliothèques minimales bien écrites pour chaque fonction que je souhaite. c'est-à-dire: curseur d'entrée de plage: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . Je trouve un bien meilleur support et une empreinte globale plus petite pour trouver des bibliothèques individuelles comme celles
jfeust
4

J'ai simplement ajouté

jQuery.browser = {
    msie: false,
    version: 0
};

après le script jquery, parce que je ne me soucie plus d'IE.

userlond
la source
3

Remplacez votre JS par

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

Lien source

Correcteur de bogues
la source
Pour le moment pour jquery 1.7+, le dernier jquery-ui est:<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Horloger
0

Comme je ne prévois pas du tout de prendre en charge les anciennes versions de MS IE, j'ai simplement remplacé toutes les références à browser.msiepar false. Ce n'est pas une bonne solution, je sais, mais cela fonctionne pour moi.

(En fait, ils apparaissaient comme !browser.msie, ce qui pouvait être omis des conditions.)

Lerin Sonberg
la source
0

Utiliser comme un coup

$(function (a) {

. . . . . puis dans votre fonction, vous pouvez utiliser la propriété msie comme

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

bonne chance

HamidSadeghi
la source
0

Utiliser comme un coup

j'utilise cette commande et je résous

Erreur "TypeError non intercepté: impossible de lire la propriété 'msie' non définie" Erreur

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}
Arezoo
la source
0

J'obtenais cette erreur en utilisant JQuery 1.10 et JQuery UI 1.8. J'ai pu résoudre cette erreur en mettant à jour vers la dernière JQuery UI 1.11.4.

Étapes pour mettre à jour l'interface utilisateur JQuery à partir de Visual Studio:

  • Accédez au projet ou à la solution
  • Clic droit: "Gérer les packages NuGet"
  • Sur la gauche, cliquez sur l'onglet "Packages installés"
  • Recherchez «JQuery UI (bibliothèque combinée)» et cliquez sur Mettre à jour
  • Si trouvé, sélectionnez-le et cliquez sur Mettre à jour
  • S'il ne le trouve pas, recherchez-le dans l'onglet "En ligne> nuget.org" sur la gauche et cliquez sur installer. Si l'ancienne version de la version de l'interface utilisateur de Jquery existe toujours, elle peut être supprimée du projet
LogicFirst
la source
0

Si jQuery est défini deux fois, vous pouvez obtenir cette erreur. Par exemple, si vous travaillez avec Primefaces (il inclut déjà jQuery) et que vous le définissez à un autre endroit.

Carlos UCR
la source