$ (เอกสาร). จดชวเลข


245

การจดชวเลขต่อไปนี้มีไว้เพื่อ$(document).readyอะไร

(function($){

//some code

})(jQuery);

ฉันเห็นรูปแบบนี้ใช้บ่อย แต่ฉันไม่สามารถหาข้อมูลอ้างอิงได้ หากจดชวเลข$(document).ready()มันจะมีเหตุผลใดที่ทำให้ใช้งานไม่ได้หรือไม่? ในการทดสอบของฉันดูเหมือนว่าจะยิงก่อนเหตุการณ์พร้อมเสมอ


ตัวแปรใด ๆ ที่กำหนดไว้ในฟังก์ชั่นรูปแบบดังกล่าว (เช่นvar somevar;) จะไม่เปลี่ยนเนื้อหาของตัวแปรที่มีชื่อเดียวกันนอกฟังก์ชั่น
Timo Huovinen

3
รหัสมีผลต่อการทำให้มั่นใจว่า $ แทน jQuery ภายในฟังก์ชันบล็อกนั้นดังนั้นโค้ดจึงสามารถพกพาไปยังที่ ๆ ที่ $ alias สำหรับ jQuery ถูกปิดใช้งานหรือถูกกำหนดเป็นอย่างอื่น
AsksAnyway

คำตอบ:


253

การจดชวเลข$(document).ready(handler)คือ$(handler)(โดยที่handlerฟังก์ชั่นอยู่) ดูที่นี่

.ready()รหัสในคำถามของคุณมีอะไรจะทำอย่างไรกับ แต่เป็นนิพจน์ฟังก์ชันที่ถูกเรียกใช้ทันที (IIFE) โดยมีวัตถุ jQuery เป็นอาร์กิวเมนต์ วัตถุประสงค์คือเพื่อ จำกัด ขอบเขตของ$ตัวแปรอย่างน้อยในบล็อกของตัวเองเพื่อไม่ให้เกิดความขัดแย้ง คุณมักจะเห็นรูปแบบที่ใช้โดย jQuery $ == jQueryปลั๊กอินเพื่อให้มั่นใจว่า


14
ในทางเทคนิคมันเป็นการแสดงออกของฟังก์ชั่นเรียกทันที มันจะเรียกตัวเองจากภายในตัวเอง ค้นหาเว็บสำหรับiifeหรือข้ามไปยังโพสต์บล็อกคาวบอย Alman ที่มีชื่อเสียง รายละเอียด ... sheesh
2540625

546

การจดชวเลขคือ:

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

24
$อาร์กิวเมนต์แรกคือ อาจต้องการเพิ่มสิ่งต่อไปนี้มันมีประโยชน์สำหรับjQuery(function($, undefined) {});
Raynos

5
@raynos ไม่จำเป็นต้องใช้ รหัสข้างต้นทำงานได้ดีเป็นนามแฝงสำหรับ$(document).ready(function(){ });
Kyle Trauberman

10
เป็นเพียงการรู้ว่าคุณได้รับ$ฟรีเป็นอาร์กิวเมนต์แรก
Raynos

3
ฉันยังคงเยี่ยมชมคำตอบนี้เดือนละครั้งหรือมากกว่านั้น
Nugsson

89

ชวเลขที่ถูกต้องคือ:

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

รหัสที่คุณโพสต์ ...

(function($){

//some code

})(jQuery);

... สร้างฟังก์ชั่นที่ไม่ระบุชื่อและดำเนินการได้ทันทีด้วยการถูกส่งผ่านไปในขณะที่หาเรื่องjQuery $ทั้งหมดได้อย่างมีประสิทธิภาพไม่สามารถใช้รหัสภายในฟังก์ชั่นและรันมันเหมือนปกติเนื่องจากมีอยู่แล้วนามแฝงสำหรับ$ jQuery: D


4
คุณสามารถบอกได้ว่ามันยังช่วยให้มั่นใจได้ว่า $ เป็นนามแฝงสำหรับ jQuery หากเครื่องมืออื่น ๆ ที่ใช้ $ เป็นนามแฝงถูกโหลด
Jim Wolff

16

$(document).ready()นี้ไม่ได้จดชวเลขเป็น

รหัสที่คุณโพสต์ใส่กล่องโค้ดด้านในและทำให้ jQuery พร้อมใช้งาน$โดยไม่สร้างมลภาวะเนมสเปซส่วนกลาง สามารถใช้เมื่อคุณต้องการใช้ทั้งต้นแบบและ jQuery ในหน้าเดียว

จัดทำเอกสารไว้ที่นี่: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-l ไลบรารี/ # use-an-immediately-invoked-function-expression


ขอบคุณที่ตอบคำถาม
MarcGuay

12

บรรทัดเฉพาะเหล่านี้เป็น wrapper ปกติสำหรับปลั๊กอิน jQuery:

"... เพื่อให้แน่ใจว่าปลั๊กอินของคุณจะไม่ชนกับห้องสมุดอื่น ๆ ที่อาจใช้สัญลักษณ์ดอลลาร์เป็นวิธีที่ดีที่สุดในการส่ง jQuery ไปยังฟังก์ชันการดำเนินการด้วยตนเอง (ปิด) ที่แมปกับสัญลักษณ์ดอลลาร์เพื่อให้ ' ไม่สามารถเขียนทับโดยห้องสมุดอื่นในขอบเขตของการดำเนินการ "

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

จากhttp://docs.jquery.com/Plugins/Authoring


11

ชวเลขที่ปลอดภัยหลายเฟรมเวิร์กสำหรับพร้อมคือ:

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

นี่เป็นเพราะ jQuery ไม่ใช่เฟรมเวิร์กเดียวที่ใช้$และundefinedตัวแปร


นอกจากนี้ยังสามารถเขียนเป็น(function($){ ... })(jQuery);
Mike Causer

2
@ MikeCauser ยังเป็นวิธีการที่ดี แต่จะไม่ถูกเรียกreadyใช้แทนจะถูกเรียกในทันที
Timo Huovinen


0

แล้วเรื่องนี้ล่ะ

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.