$ (function () {}) คืออะไร ทำ?


208

บางครั้งฉันทำฟังก์ชั่นและเรียกใช้ฟังก์ชั่นในภายหลัง

ตัวอย่าง:

function example { alert('example'); }
example(); // <-- Then call it later

อย่างไรก็ตามฟังก์ชันบางอย่างไม่สามารถเรียกได้ ฉันต้องเรียกฟังก์ชั่นเหล่านั้นภายใน:

$(function() { });

สิ่งที่ทำ$(function() {});และ(function() { });หมายถึงและสิ่งที่แตกต่าง / วัตถุประสงค์ของสิ่งเหล่านี้?

คำตอบ:


307
$(function() { ... });

เป็นเพียง jQuery ทางลัดสำหรับ

$(document).ready(function() { ... });

สิ่งที่ออกแบบมาเพื่อทำ (เหนือสิ่งอื่นใด) คือให้แน่ใจว่าฟังก์ชันของคุณถูกเรียกใช้เมื่อองค์ประกอบ DOM ทั้งหมดของหน้าพร้อมใช้งาน

อย่างไรก็ตามฉันไม่คิดว่าเป็นปัญหาที่คุณมี - คุณสามารถอธิบายสิ่งที่คุณหมายถึงโดย 'อย่างใดฟังก์ชั่นบางอย่างไม่สามารถเรียกและฉันต้องเรียกฟังก์ชั่นเหล่านั้นภายใน' อาจโพสต์รหัสเพื่อแสดงว่ามีอะไรไม่ทำงานอย่างที่คาดไว้

แก้ไข: การอ่านคำถามของคุณอีกครั้งอาจเป็นไปได้ว่าฟังก์ชั่นของคุณกำลังทำงานอยู่ก่อนที่หน้าจะโหลดเสร็จดังนั้นจึงทำงานไม่ถูกต้อง วางไว้ใน $ (ฟังก์ชั่น) แน่นอนจะแก้ไขได้!


2
เกิดอะไรขึ้นถ้า $ (function () {}); มีอยู่แล้วใน $ (เอกสาร) .ready ()?
jwchang

ฟังก์ชั่นไม่สามารถใช้งานได้หากไม่มี $ (ฟังก์ชั่น () แม้ว่ามันจะมีอยู่ใน $ (เอกสาร) พร้อมแล้ว ()
jwchang

คำถามที่ดี! ฉันเชื่อว่ามันควรจะใช้ได้เพราะ jQuery รู้ว่าคุณอยู่ในสถานที่ที่เหมาะสม ถ้าคุณอยู่ข้างใน. Ready () คุณก็สามารถเรียกฟังก์ชั่นของคุณได้ตามปกติ ถ้ามันไม่ทำงานให้โพสต์ตัวอย่างหรือดีกว่า - ลองทำซอเป็น jsfiddle.net
Russ Clarke

4
@JeongWooChang (function () { ... })();ทำมันชอบดังนั้น คุณต้องเพิ่ม()เพื่อเรียกใช้ฟังก์ชันของคุณ
Šime Vidas

3
"นักพัฒนาที่มีประสบการณ์บางครั้งใช้ชวเลข$()สำหรับ$( document ).ready()หากคุณกำลังเขียนโค้ดที่คนที่ไม่เคยมีประสบการณ์กับ jQuery อาจเห็นว่าดีที่สุดที่จะใช้แบบฟอร์มที่ยาว" - learn.jquery.com
thdoan

15

ต่อไปนี้คือการเรียกใช้ฟังก์ชัน jQuery:

$(...);

อันไหนคือ "ฟังก์ชั่น jQuery" $เป็นฟังก์ชันและ$(...)คุณเรียกใช้ฟังก์ชันนั้น

พารามิเตอร์แรกที่คุณระบุมีดังต่อไปนี้:

function() {}

พารามิเตอร์เป็นฟังก์ชั่นที่คุณระบุและ$ฟังก์ชั่นจะเรียกวิธีการที่ให้มาเมื่อ DOM เสร็จสิ้นการโหลด


8

มันเป็นเพียงแค่จดชวเลขในขณะที่:$(document).ready() $(document).ready(function() { YOUR_CODE_HERE });บางครั้งคุณต้องใช้เพราะฟังก์ชั่นของคุณทำงานก่อนที่ DOM จะโหลดเสร็จ

ทุกอย่างอธิบายไว้ที่นี่: http://docs.jquery.com/Tutorials:Introducing_$ (เอกสาร) .ready ()


5

ฉันคิดว่าคุณอาจทำให้ Javascript สับสนด้วยวิธีการ jQuery Javilla วานิลลาหรือธรรมดาเป็นสิ่งที่ต้องการ:

function example() {
}

สามารถเรียกใช้ฟังก์ชันของธรรมชาตินั้นได้ทุกที่ทุกเวลา

jQuery (ห้องสมุดที่สร้างขึ้นบน Javascript) ได้สร้างขึ้นในฟังก์ชั่นที่จำเป็นต้องให้การแสดงผล DOM อย่างสมบูรณ์ก่อนที่จะถูกเรียก ไวยากรณ์สำหรับเมื่อสิ่งนี้เสร็จสมบูรณ์คือ:

$(document).ready(function() {
});

ดังนั้นฟังก์ชั่น jQuery ซึ่งนำหน้าด้วย$หรือคำjQueryโดยทั่วไปเรียกว่าจากภายในวิธีการที่

$(document).ready(function() {        
    // Assign all list items on the page to be the  color red.  
    //      This does not work until AFTER the entire DOM is "ready", hence the $(document).ready()
    $('li').css('color', 'red');   
});

โค้ดหลอกสำหรับบล็อกนั้นคือ:

เมื่อรูปแบบวัตถุเอกสาร$(document)พร้อมเรียกใช้ฟังก์ชันต่อไปนี้.ready() function() { }ในฟังก์ชั่นนั้นตรวจสอบทุก<li>หน้า$('li')และใช้วิธีการ jQuery .CSS () เพื่อตั้งค่าคุณสมบัติ CSS "color" เป็นค่า "red".css('color', 'red');


2

นี่คือทางลัดสำหรับ$(document).ready()ซึ่งจะดำเนินการเมื่อเบราว์เซอร์โหลดหน้าเสร็จแล้ว (หมายถึงที่นี่ "เมื่อ DOM พร้อมใช้งาน") ดูhttp://www.learningjquery.com/2006/09/introducing-document-ready หากคุณพยายามโทรexample()ก่อนที่เบราว์เซอร์จะโหลดหน้าเว็บเสร็จอาจไม่ทำงาน


1
"การโหลดหน้าเว็บเสร็จ" ไม่ถูกต้องและทำให้เข้าใจผิด
Yahel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.