หากฉันมีฟังก์ชั่นมากมายในการเริ่มต้นพวกเขาทั้งหมดจะต้องอยู่ภายใต้หนึ่งเดียว:
$(document).ready(function() {
หรือฉันสามารถมีหลายงบดังกล่าว?
หากฉันมีฟังก์ชั่นมากมายในการเริ่มต้นพวกเขาทั้งหมดจะต้องอยู่ภายใต้หนึ่งเดียว:
$(document).ready(function() {
หรือฉันสามารถมีหลายงบดังกล่าว?
คำตอบ:
คุณสามารถมีหลายรายการได้ แต่ไม่ใช่สิ่งที่ประณีตที่สุดที่จะทำ พยายามอย่าใช้มากเกินไปเพราะจะส่งผลกระทบต่อความสามารถในการอ่าน นอกจากนั้นมันถูกกฎหมายอย่างสมบูรณ์ ดูด้านล่าง:
http://www.learningjquery.com/2006/09/multiple-document-ready
ลองใช้ดู
$(document).ready(function() {
alert('Hello Tom!');
});
$(document).ready(function() {
alert('Hello Jeff!');
});
$(document).ready(function() {
alert('Hello Dexter!');
});
คุณจะพบว่ามันเทียบเท่ากับสิ่งนี้จดบันทึกลำดับของการดำเนินการ:
$(document).ready(function() {
alert('Hello Tom!');
alert('Hello Jeff!');
alert('Hello Dexter!');
});
นอกจากนี้ยังเป็นที่น่าสังเกตว่าฟังก์ชั่นที่กำหนดภายใน$(document).ready
บล็อกหนึ่งไม่สามารถเรียกใช้จากอีกบล็อกได้$(document).ready
บล็อกฉันเพียงแค่รันการทดสอบนี้:
$(document).ready(function() {
alert('hello1');
function saySomething() {
alert('something');
}
saySomething();
});
$(document).ready(function() {
alert('hello2');
saySomething();
});
ผลลัพธ์คือ:
hello1
something
hello2
คุณสามารถใช้หลาย ๆ แต่คุณยังสามารถใช้หลายฟังก์ชั่นในเอกสารเดียวได้เช่นกัน:
$(document).ready(function() {
// Jquery
$('.hide').hide();
$('.test').each(function() {
$(this).fadeIn();
});
// Reqular JS
function test(word) {
alert(word);
}
test('hello!');
});
ใช่คุณสามารถมีหลายช่วงตึกได้อย่างง่ายดาย เพียงระวังการพึ่งพาระหว่างกันเนื่องจากลำดับการประเมินอาจไม่ใช่สิ่งที่คุณคาดหวัง
ใช่เป็นไปได้ที่จะมีการโทร $ (เอกสาร) .ready () หลายรายการ อย่างไรก็ตามฉันไม่คิดว่าคุณจะรู้ได้ว่าพวกเขาจะถูกประหารอย่างไร (ที่มา)
Ready handlers bound this way are executed after any bound by the other three methods above.
ใช่เป็นไปได้ แต่คุณสามารถใช้ div #mydiv และใช้ทั้งคู่ได้ดีขึ้น
$(document).ready(function(){});
//and
$("#mydiv").ready(function(){});
ใช่มันก็โอเคอย่างสมบูรณ์ แต่หลีกเลี่ยงการทำมันโดยไม่มีเหตุผล ตัวอย่างเช่นฉันใช้เพื่อประกาศกฎไซต์ทั่วโลกแยกจากหน้าเว็บแยกต่างหากเมื่อไฟล์จาวาสคริปต์ของฉันถูกสร้างแบบไดนามิก แต่ถ้าคุณทำต่อไปเรื่อย ๆ มันจะยากที่จะอ่าน
นอกจากนี้คุณไม่สามารถเข้าถึงวิธีการบางอย่างจากการjQuery(function(){});
โทรอื่น
ดังนั้นจึงเป็นอีกเหตุผลที่คุณไม่ต้องการทำเช่นนั้น
ด้วยเก่าwindow.onload
แม้ว่าคุณจะแทนที่เก่าทุกครั้งที่คุณระบุฟังก์ชั่น
ใช่คุณสามารถ.
ส่วนเอกสารพร้อมใช้หลายส่วนมีประโยชน์อย่างยิ่งหากคุณมีโมดูลอื่น ๆ ที่ปิดหน้าเดียวกันกับที่ใช้งาน ด้วยการwindow.onload=func
ประกาศเก่าทุกครั้งที่คุณระบุฟังก์ชั่นที่จะเรียกมันจะแทนที่เก่า
ตอนนี้ฟังก์ชั่นทั้งหมดที่ระบุจะถูกจัดคิว / สแต็ก (ใครบางคนสามารถยืนยันได้) โดยไม่คำนึงถึงส่วนที่พร้อมเอกสารที่พวกเขาจะระบุมา
ฉันคิดว่าวิธีที่ดีกว่าที่จะไปคือการเปลี่ยนไปใช้ฟังก์ชั่นที่มีชื่อ(ตรวจสอบล้นนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น) (ตรวจสอบล้นนี้มานานในเรื่องนั้น)ด้วยวิธีนี้คุณสามารถเรียกพวกเขาจากเหตุการณ์เดียว
ชอบมาก
function firstFunction() {
console.log("first");
}
function secondFunction() {
console.log("second");
}
function thirdFunction() {
console.log("third");
}
ด้วยวิธีนี้คุณสามารถโหลดได้ในฟังก์ชั่นพร้อมใช้งานเดียว
jQuery(document).on('ready', function(){
firstFunction();
secondFunction();
thirdFunction();
});
สิ่งนี้จะแสดงผลต่อไปนี้ใน console.log ของคุณ:
first
second
third
วิธีนี้คุณสามารถใช้ฟังก์ชั่นซ้ำสำหรับกิจกรรมอื่นได้
jQuery(window).on('resize',function(){
secondFunction();
});
มันถูกกฎหมาย แต่บางครั้งก็ทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์ ตัวอย่างฉันใช้ไลบรารี MagicSuggest และเพิ่มอินพุต MagicSuggest สองรายการในหน้าของโครงการของฉันและใช้ฟังก์ชั่นแยกเอกสารพร้อมฟังก์ชั่นสำหรับแต่ละการกำหนดค่าเริ่มต้นของอินพุต การเตรียมใช้งานอินพุตแรกสุดใช้งานได้ แต่ไม่ใช่อินพุตที่สองและไม่ให้ข้อผิดพลาดอินพุตที่สองไม่แสดงขึ้น ดังนั้นฉันมักจะแนะนำให้ใช้หนึ่งฟังก์ชั่นพร้อมเอกสาร
คุณยังสามารถซ้อนฟังก์ชันพร้อมใช้งานของเอกสารในไฟล์ html ที่รวมอยู่ด้วย นี่คือตัวอย่างการใช้ jquery:
ไฟล์: test_main.html
<!DOCTYPE html>
<html lang="en">
<head>
<script src="jquery-1.10.2.min.js"></script>
</head>
<body>
<div id="main-container">
<h1>test_main.html</h1>
</div>
<script>
$(document).ready( function()
{
console.log( 'test_main.html READY' );
$("#main-container").load("test_embed.html");
} );
</script>
</body>
</html>
ไฟล์: test_embed.html
<h1>test_embed.html</h1>
<script>
$(document).ready( function()
{
console.log( 'test_embed.html READY' );
} );
</script>
เอาต์พุตคอนโซล:
test_main.html READY test_main.html:15
test_embed.html READY (program):4
เบราว์เซอร์แสดง:
test_embed.html
คุณสามารถทำได้ด้วยวิธีต่อไปนี้:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#hide").click(function(){
$("#test").hide();
});
$("#show").click(function(){
$("#test").show();
});
});
</script>
</head>
<body>
<h2>This is a test of jQuery!</h2>
<p id="test">This is a hidden paragraph.</p>
<button id="hide">Click me to hide</button>
<button id="show">Click me to show</button>
</body>
คำตอบก่อนหน้านี้แสดงให้เห็นโดยใช้ฟังก์ชั่นที่มีชื่อหลายรายการในบล็อก. Ready สำเร็จรูปหรือฟังก์ชั่นที่ไม่มีชื่อเดียวในบล็อก. Ready พร้อมกับฟังก์ชั่นอื่นที่มีชื่อนอกบล็อก. Ready ฉันพบคำถามนี้ขณะทำการวิจัยหากมีวิธีที่จะมีฟังก์ชั่นที่ไม่มีชื่อหลายชื่อในบล็อก. Ready - ฉันไม่สามารถแก้ไขไวยากรณ์ได้ ในที่สุดฉันก็ค้นพบมันและหวังว่าโดยการโพสต์รหัสการทดสอบของฉันฉันจะช่วยให้ผู้อื่นมองหาคำตอบของคำถามเดียวกันกับที่ฉันมี