ฉันรู้ว่านี่เป็นการปฏิบัติที่ไม่ดี อย่าเขียนโค้ดแบบนี้ถ้าเป็นไปได้
แน่นอนว่าเรามักจะพบว่าตัวเองอยู่ในสถานการณ์ที่ตัวอย่าง Javascript แบบอินไลน์ที่ชาญฉลาดสามารถแก้ไขปัญหาได้อย่างรวดเร็ว
ฉันกำลังติดตามคำถามนี้เพื่อความเข้าใจอย่างถ่องแท้ว่าเกิดอะไรขึ้น (และข้อผิดพลาดที่อาจเกิดขึ้น) เมื่อมีการเขียนสิ่งนี้:
<a href="#" onclick="alert('Hi')">Click Me</a>
เท่าที่ฉันสามารถบอกได้ว่านี่เป็นหน้าที่เหมือนกับ
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
การสรุปจากสิ่งนี้ดูเหมือนว่าสตริงที่กำหนดให้กับแอตทริบิวต์onclick
จะถูกแทรกภายในฟังก์ชันที่ไม่ระบุตัวตนซึ่งกำหนดให้กับตัวจัดการการคลิกขององค์ประกอบ เป็นเช่นนั้นจริงหรือ?
เพราะฉันกำลังเริ่มทำสิ่งนี้:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
ซึ่งได้ผล แต่ฉันไม่รู้ว่าแฮ็คนี้มีค่าแค่ไหน มันดูน่าสงสัยเพราะไม่มีการส่งคืนฟังก์ชันที่ชัดเจน!
คุณอาจถามว่าทำไมคุณถึงทำแบบนี้สตีฟ? Inline JS เป็นการปฏิบัติที่ไม่ดี!
พูดตามตรงว่าฉันเบื่อที่จะแก้ไขโค้ดสามส่วนที่แตกต่างกันเพียงเพื่อแก้ไขส่วนหนึ่งของหน้าโดยเฉพาะอย่างยิ่งเมื่อฉันสร้างต้นแบบบางอย่างเพื่อดูว่าจะใช้งานได้หรือไม่ มันง่ายกว่ามากและบางครั้งก็สมเหตุสมผลที่โค้ดที่เกี่ยวข้องโดยเฉพาะกับองค์ประกอบ HTML นี้จะถูกกำหนดไว้ภายในองค์ประกอบ: เมื่อฉันตัดสินใจ 2 นาทีต่อมาว่านี่เป็นความคิดที่แย่และแย่มากฉันสามารถหา div ทั้งหมดได้ (หรืออะไรก็ได้ ) และฉันไม่มี Cruft JS และ CSS ลึกลับจำนวนหนึ่งห้อยอยู่ในส่วนที่เหลือของหน้าทำให้การเรนเดอร์ช้าลงเล็กน้อย สิ่งนี้คล้ายกับแนวคิดของสถานที่อ้างอิง แต่แทนที่จะคิดถึงแคชเรากำลังดูจุดบกพร่องและการขยายโค้ด
#click_me
เหตุการณ์ DOMready หรือวางสคริปต์ไว้หลังโหนด
document.getElementById("click_me").onclick;
ในคอนโซลให้ทำ หรือแจ้งเตือน. คุณจะเห็นว่ามันอยู่ในฟังก์ชัน