UnEught TypeError: Tidak dapat membaca properti 'msie' alat jQuery tidak terdefinisi

190

Saya mendapatkan kesalahan berikut di konsol dev Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

Pemahaman saya adalah bahwa itu karena .browsersekarang sudah usang di jQuery namun saya menggunakan versi terbaru dari alat-alat jQuery dan masih memberikan kesalahan, saya memeriksa jsfile dan ada di sana.

Bagaimana saya bisa mengatasi ini sehingga tidak memberikan kesalahan?

Colin747
sumber
1
kesalahan ini tidak cukup. Dari elemen apa Anda mencoba membaca ini?
Siddharth Gupta
Saya belum pernah menggunakan .browserkode saya sama sekali. Tampaknya mendeteksi itu di file alat jQuery.
Colin747
6
The browserobjek tidak hanya usang di 1,9, itu hilang . Jika Alat jQuery masih menggunakannya, maka Alat jQuery rusak.
Runcing
1
@Alexander yang sepertinya menyingkirkan kesalahan. Anda dapat memberikan jawaban jika mau.
Colin747
3
Alat jQuery terbaru hanya diuji dengan jQuery 1.7. jQuery 1.9 tidak kompatibel dengan versi terbaru dari jQuery Tools; sesederhana itu. Buang jQuery Tools atau turunkan jQuery ke versi apa pun di bawah 1.9 yang berfungsi. Kalau tidak, jangan berharap ada yang memperbarui jQuery Tools, itu sudah tanpa pengembang selama beberapa tahun terakhir.
Sparky

Jawaban:

189

The $.browserMetode telah dihapus karena jQuery 1.9.

jQuery.browser() removed

The jQuery.browser()Metode telah usang sejak jQuery 1.3 dan dihapus di 1.9. Jika diperlukan, ini tersedia sebagai bagian dari plugin jQuery Migrate. Kami merekomendasikan penggunaan deteksi fitur dengan perpustakaan seperti Modernizr.

- Panduan Upgrade jQuery Core 1.9 .

Seperti yang dinyatakan dalam Panduan Upgrade, Anda dapat mencoba menggunakan plugin jQuery Migrate untuk memulihkan fungsionalitas ini dan membiarkan jQuery Tools berfungsi.

Alexander
sumber
242

Anda dapat memeriksa solusi ini dengan AJ. Cukup mudah, cukup salin dan tempel baris kode berikut.

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

Referensi :

JrBriones
sumber
4
Ini berfungsi Sempurna! Tapi saya menganggap ini harus digunakan sebagai tambalan, bukan solusi kan?
Jobokai
Terima kasih, menggunakan plugin jquery yang menggunakan ini dan ini adalah solusi jangka pendek yang mudah sampai perbaikan nyata berjalan.
Joe Meyer
Terima kasih. Ini memperbaiki Alat Kueri v1.2.7, karena kami meningkatkan JQuery ke yang terbaru.
bsentosa
1
WOW, Jika saya bisa memberi Anda 10 plus, saya akan melakukannya sekarang.
Iman Hejazi
9
Jawaban ini tidak lagi benar, karena IE11 tidak memiliki token MSIE dalam userAgentstring.
Dave Methvin
47

Gunakan tag skrip berikut di file jsp / js Anda:

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

ini pasti akan berhasil.

Manisha Srivastava
sumber
pastikan Anda memiliki koneksi internet yang berfungsi. Jika Anda menggunakan offline maka unduh file js di akhir Anda, dan kemudian rujuk file itu.
Manisha Srivastava
Yah saya bisa melihat bahwa itu di-host secara online ... lagian terima kasih saya menyelesaikannya dengan jquery.noConflict () karena saya memiliki dua versi untuk jquery yang digunakan pada halaman yang sama.
Prerit Mohan
@ User5590: kapan saja :)
Manisha Srivastava
Seharusnya tidak menggunakan jquery yang tidak diperkecil dalam produksi: periksa cdnjs.com misalnya. Dan gunakan HTTPS sebagai gantinya.
Takman
27

Saya menggunakan kode di bawah ini setelah file js termasuk dan berfungsi sekarang.

<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
sumber
Tautan tautan ini memberi saya kesalahan, tetapi kode kecil yang Anda tulis ini banyak membantu saya, terima kasih.
Saman
7

Ini adalah bug Alat jQuery di GitHub . Anda dapat mencoba salah satu tambalan.

sunting - tidak terlihat bagi saya seolah Alat jQuery mendapatkan banyak dukungan. Saya pribadi tidak akan memulai proyek baru dengan ketergantungan pada perpustakaan itu kecuali saya siap mengambil alih dukungan sendiri.

Runcing
sumber
1
+1, jQuery Tools telah berantakan total selama beberapa tahun terakhir. Itu bukan "mendapatkan banyak dukungan" sangat akurat dan meremehkan. Saya pikir hanya ada satu pembaruan kecil sejak jQuery 1.3 dan tidak ada pengembang selama beberapa tahun terakhir juga.
Sparky
Setuju, apakah ada yang punya rekomendasi untuk perpustakaan pengganti? Sesuatu dengan penggeser, overlay, dan rentang input slider? Saya menghindari jQuery mobile karena sudah menggunakan pra-gaya. Saya telah menata itu sebelumnya dan itu adalah mimpi buruk.
inorganik
5
Saya telah pindah ke hanya menemukan perpustakaan minimal yang ditulis dengan baik untuk setiap fungsi yang saya inginkan. yaitu: range input slider: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . Saya menemukan dukungan yang jauh lebih baik dan secara keseluruhan jejak kaki yang lebih kecil menemukan perpustakaan individual seperti ini
Juli
4

Saya hanya menambahkan

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

setelah skrip jquery, karena saya tidak peduli tentang IE lagi.

userlond
sumber
3

Ganti JS Anda dengan

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

Tautan sumber

Perbaikan bug
sumber
Saat ini untuk jquery 1.7+, jquery-ui terbaru adalah:<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>
Pembuat jam
0

Karena saya tidak berencana untuk mendukung versi MS IE lama sama sekali, saya hanya mengganti semua referensi browser.msiedengan false. Bukan solusi yang bagus, saya tahu, tapi itu berhasil untuk saya.

(Sebenarnya, mereka muncul sebagai !browser.msie, yang bisa dihilangkan dari kondisi.)

Lerin Sonberg
sumber
0

Gunakan seperti pukulan

$(function (a) {

. . . . .kemudian dalam fungsi Anda, Anda dapat menggunakan properti msie seperti

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

semoga berhasil

Hamid Sadeghi
sumber
0

Gunakan seperti pukulan

saya menggunakan perintah ini dan menyelesaikannya

"UnEught TypeError: Tidak dapat membaca properti 'msie' dari undefined" Kesalahan

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

Saya mendapatkan kesalahan ini saat menggunakan JQuery 1.10 dan JQuery UI 1.8. Saya dapat mengatasi kesalahan ini dengan memperbarui ke JQuery UI 1.11.4 terbaru.

Langkah-langkah untuk memperbarui JQuery UI dari Visual Studio:

  • Arahkan ke Proyek atau Solusi
  • Klik kanan: "Kelola Paket NuGet"
  • Di sebelah kiri, klik tab "Paket Terpasang"
  • Cari "JQuery UI (Combined library)" dan klik Perbarui
  • Jika ditemukan, Pilih dan klik Perbarui
  • Jika tidak ditemukan, temukan di tab "Online> nuget.org" di sebelah kiri dan klik instal. Jika versi lama dari versi Jquery UI masih ada, itu dapat dihapus dari proyek
LogicFirst
sumber
0

Jika Anda memiliki jQuery yang didefinisikan dua kali, maka Anda bisa mendapatkan kesalahan ini. Misalnya, jika Anda bekerja dengan Primefaces (sudah termasuk jQuery) dan Anda mendefinisikannya di tempat lain.

Carlos UCR
sumber