Uncaught TypeError: impossibile leggere la proprietà 'msie' di undefined - strumenti jQuery


190

Ricevo il seguente errore nella console di sviluppo di Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

La mia comprensione è che è perché .browserora è deprecato in jQuery, tuttavia sto usando l'ultima versione degli strumenti jQuery e continua a dare l'errore, ho controllato il jsfile ed è lì.

Come posso aggirare questo in modo che non dia l'errore?


1
questo errore è insufficiente. Da quale elemento stai provando a leggere questo?
Siddharth Gupta,

Non ho usato affatto .browsernel mio codice. Sembra che lo stia rilevando nel file degli strumenti jQuery.
Colin747,

6
L' browseroggetto non è solo deprecato in 1.9, è sparito . Se jQuery Tools lo sta ancora utilizzando, jQuery Tools è interrotto.
Puntato il

1
@Alexander che sembrava sbarazzarsi dell'errore. Puoi dare una risposta se vuoi.
Colin747,

3
Gli ultimi jQuery Tools sono stati testati solo con jQuery 1.7. jQuery 1.9 non è compatibile con l'ultima versione di jQuery Tools; è così semplice. Scarica jQuery Tools o esegui il downgrade di jQuery a qualsiasi versione precedente alla 1.9 che funziona. Altrimenti, non aspettarti che nessuno aggiorni jQuery Tools, è stato senza uno sviluppatore negli ultimi anni.
Sparky

Risposte:


189

Il $.browsermetodo è stato rimosso da jQuery 1.9.

jQuery.browser() removed

Il jQuery.browser()metodo è stato deprecato da jQuery 1.3 ed è stato rimosso in 1.9. Se necessario, è disponibile come parte del plug-in jQuery Migrate. Si consiglia di utilizzare il rilevamento delle funzionalità con una libreria come Modernizr.

- Guida all'aggiornamento di jQuery Core 1.9 .

Come indicato nella Guida all'aggiornamento, puoi provare a utilizzare il plug- in jQuery Migrate per ripristinare questa funzionalità e far funzionare jQuery Tools.


242

Puoi verificare questa soluzione da AJ. È piuttosto semplice, basta copiare e incollare le seguenti righe di codice.

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

Riferimento :


4
Funziona perfettamente! Ma penso che questo dovrebbe essere usato come una patch, piuttosto che una soluzione, giusto?
Jobokai,

Grazie, usando un plugin jquery che stava usando questo e questa era una soluzione facile a breve termine fino a quando non verrà implementata una vera correzione.
Joe Meyer,

Grazie. Risolto il problema con Query Tools v1.2.7, poiché abbiamo aggiornato JQuery alla versione più recente.
bsentosa,

1
WOW, se potessi darti 10 plus, lo farò adesso.
Iman Hejazi,

9
Questa risposta non è più corretta, poiché IE11 non ha il token MSIE nella userAgentstringa.
Dave Methvin,

47

Utilizzare il seguente tag di script nel file 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>

questo funzionerà di sicuro.


assicurati di avere una connessione Internet funzionante. Se si utilizza offline, scaricare il file js alla fine, quindi fare riferimento a quel file.
Manisha Srivastava,

Bene, posso vedere che è ospitato online ... comunque grazie l'ho risolto con jquery.noConflict () dato che avevo due versioni di jquery utilizzate nella stessa pagina.
Prerita Mohan il

@ User5590: quando vuoi :)
Manisha Srivastava,

Non dovresti usare jquery non minimizzato in produzione: controlla cdnjs.com per esempio. E usa invece HTTPS.
Takman,

27

Uso il codice seguente dopo aver incluso il file js e ora funziona.

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

Questo link di collegamento mi dà errore, ma questo piccolo pezzo di codice che mi ha scritto ha aiutato molto, grazie uomo.
Saman,

7

Ecco il bug di jQuery Tools su GitHub . Puoi provare una delle patch.

modifica - non mi sembra che jQuery Tools stia ricevendo molto supporto. Personalmente non avrei iniziato un nuovo progetto con una dipendenza da quella biblioteca se non fossi stato disposto a prendere il controllo da solo.


1
+1, jQuery Tools è stato un casino completo negli ultimi anni. Che non sia "ottenere molto supporto" è molto preciso e un eufemismo enorme. Penso che ci sia stato solo un aggiornamento minore da jQuery 1.3 e nessuno sviluppatore negli ultimi due anni.
Sparky

D'accordo, qualcuno ha una raccomandazione per una biblioteca sostitutiva? Qualcosa con uno scroller, un overlay e un cursore di input della gamma? Evito jQuery mobile perché è pre-disegnato. L'ho disegnato prima ed è un incubo.
Inorganik,

5
Sono passato alla ricerca di librerie minime ben scritte per ogni funzione che desidero. ovvero: intervallo di scorrimento input: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . Trovo un supporto molto migliore e, nel complesso, un ingombro ridotto nel trovare singole librerie come queste
solo il

4

Ho semplicemente aggiunto

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

dopo jquery script, perché non mi interessa più di IE.


3

Sostituisci il tuo JS con

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

Link alla fonte


Al momento per jquery 1.7+ l'ultima jquery-ui è:<link rel="stylesheet" href="https://stackoverflow.com//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>
Orologiaio

0

Come non ho intenzione di supportare le vecchie versioni MS IE a tutti, ho semplicemente sostituito tutti i riferimenti a browser.msiecon false. Non è una bella soluzione, lo so, ma funziona per me.

(In realtà, sono apparsi come !browser.msie, che potrebbe essere omesso dalle condizioni.)


0

Usa come un colpo

$(function (a) {

. . . . .quindi nella tua funzione puoi usare la proprietà msie come

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

in bocca al lupo


0

Usa come un colpo

io uso questo comando e risolvo

Errore "Typecaer non rilevato: impossibile leggere la proprietà" msie "di undefined" Errore

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

0

Stavo ottenendo questo errore durante l'utilizzo di JQuery 1.10 e JQuery UI 1.8. Sono stato in grado di risolvere questo errore aggiornando all'ultima interfaccia utente JQuery 1.11.4.

Passaggi per aggiornare l'interfaccia utente di JQuery da Visual Studio:

  • Passa a Progetto o Soluzione
  • Tasto destro del mouse: "Gestisci pacchetti NuGet"
  • A sinistra, fai clic sulla scheda "Pacchetti installati"
  • Cerca "JQuery UI (Libreria combinata)" e fai clic su Aggiorna
  • Se trovato, selezionalo e fai clic su Aggiorna
  • Se non trovato, trovalo nella scheda "Online> nuget.org" sulla sinistra e fai clic su Installa. Se la versione precedente della versione dell'interfaccia utente di Jquery è ancora esistente, può essere eliminata dal progetto

0

Se jQuery è stato definito due volte, è possibile ottenere questo errore. Ad esempio, se stai lavorando con Primefaces (include già jQuery) e lo definisci in un altro posto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.