$ (dokumen). sudah singkatan


245

Apakah singkatan berikut untuk $(document).ready?

(function($){

//some code

})(jQuery);

Saya melihat pola ini banyak digunakan, tetapi saya tidak dapat menemukan referensi untuk itu. Jika itu adalah singkatan $(document).ready(), apakah ada alasan tertentu itu mungkin tidak berfungsi? Dalam tes saya sepertinya selalu menyala sebelum acara siap.


Variabel apa pun yang didefinisikan di dalam fungsi pola yang disebutkan (mis. var somevar;) Tidak akan mengubah isi variabel dengan nama yang sama di luar fungsi
Timo Huovinen

3
Kode memiliki efek memastikan $ mewakili jQuery di dalam blok fungsi tersebut sehingga kode tersebut portabel ke tempat-tempat di mana $ alias untuk jQuery dinonaktifkan atau didefinisikan sebagai sesuatu yang lain.
AsksAnyway

Jawaban:


252

Singkatan untuk $(document).ready(handler)is $(handler)(di mana handleradalah fungsi). Lihat di sini .

Kode dalam pertanyaan Anda tidak ada hubungannya dengan .ready(). Sebaliknya, ini adalah ekspresi fungsi yang dipanggil langsung (IIFE) dengan objek jQuery sebagai argumennya. Tujuannya adalah untuk membatasi ruang lingkup setidaknya $variabel ke bloknya sendiri sehingga tidak menimbulkan konflik. Anda biasanya melihat pola yang digunakan oleh plugin jQuery untuk memastikannya $ == jQuery.


14
Secara teknis ini adalah ekspresi fungsi yang segera dipanggil . Jika itu memohon pada diri sendiri, itu akan memanggil dirinya dari dalam dirinya sendiri. Cari di web untuk iife, atau langsung beralih ke posting blog terkenal Cowboy Alman . Detail ... sheesh.
2540625

546

Steno adalah:

$(function() {
    // Code here
});

24
Argumen pertama adalah $. Mungkin ingin menambahkan itu. Ini berguna untukjQuery(function($, undefined) {});
Raynos

5
@raynos Tidak diperlukan. kode di atas berfungsi dengan baik sebagai alias untuk$(document).ready(function(){ });
Kyle Trauberman

10
Hanya berguna untuk mengetahui bahwa Anda mendapatkan $secara gratis sebagai argumen pertama.
Raynos

3
Saya masih mengunjungi jawaban ini sebulan sekali atau lebih.
Nugsson

89

Steno yang benar adalah ini:

$(function() {
    // this behaves as if within document.ready
});

Kode yang Anda posting ...

(function($){

//some code

})(jQuery);

... membuat fungsi anonim dan menjalankannya segera dengan jQueryditeruskan sebagai argumen $. Yang perlu dilakukan adalah mengambil kode di dalam fungsi dan menjalankannya seperti biasa, karena $sudah menjadi alias untuk jQuery. : D


4
Anda bisa mengatakan bahwa itu juga memastikan bahwa $ adalah alias untuk jQuery, jika alat lain yang juga menggunakan $ sebagai alias dimuat
Jim Wolff


12

Baris khusus ini adalah pembungkus biasa untuk plugin jQuery:

"... untuk memastikan bahwa plugin Anda tidak bertabrakan dengan perpustakaan lain yang mungkin menggunakan tanda dolar, itu adalah praktik terbaik untuk meneruskan jQuery ke fungsi pelaksana mandiri (penutupan) yang memetakannya ke tanda dolar agar bisa ' tidak akan ditimpa oleh perpustakaan lain dalam lingkup pelaksanaannya. "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

Dari http://docs.jquery.com/Plugins/Authoring


11

Steno aman multi-kerangka kerja untuk siap adalah:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

Ini karena jQuery bukan satu-satunya kerangka kerja yang menggunakan variabel $danundefined


juga dapat ditulis sebagai(function($){ ... })(jQuery);
Mike Causer

2
@ MikeCauser juga pendekatan yang baik, tetapi tidak akan dipanggil ready, melainkan segera dipanggil
Timo Huovinen

5

Varian yang lebih pendek adalah untuk digunakan

$(()=>{

});

di mana $singkatan jQuery dan ()=>{}disebut 'fungsi panah' yang mewarisi thisdari penutupan. (Sehingga di dalam thisAnda mungkin akan memiliki windowbukan document.)


0

Bagaimana dengan ini?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.