यह प्रश्न इतना बुनियादी है, मुझे लगता है कि कुछ का डुप्लिकेट होना चाहिए, भले ही मेरे पास looked for something similar है।जावास्क्रिप्ट: ईवेंट हैंडलर पंजीकृत करने के लिए सबसे अच्छी जगह
मेरा प्रश्न मूल रूप से है: प्रारंभ में एचटीएमएल तत्वों के लिए ईवेंट हैंडलर पंजीकृत करने के लिए सबसे अच्छी जगह कहां है?
एक ईवेंट हैंडलर रजिस्टर करने के लिए सबसे आसान तरीका है जाहिर है बस इसे इनलाइन करने के लिए:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
लेकिन इस आधुनिक वेब विकास में तर्क और सामग्री की जुदाई की ओर भारी जुलूस के खिलाफ जाता है। तो, 2012 में, सभी तर्क/व्यवहार शुद्ध जावास्क्रिप्ट कोड में किया जाना चाहिए। यह बहुत अच्छा है, और यह अधिक रखरखाव कोड की ओर जाता है। लेकिन आपको अभी भी कुछ प्रारंभिक हुक की आवश्यकता है जो आपके HTML तत्वों को आपके जावास्क्रिप्ट कोड से जोड़ता है।
आमतौर पर, मैं बस की तरह कुछ कार्य करें: - क्योंकि हम अभी भी यहाँ इनलाइन जावास्क्रिप्ट का उपयोग कर रहे
<body onload = "registerAllEventHandlers()">
लेकिन ... कि अभी भी "धोखा दे" है, यह नहीं है। लेकिन हमारे पास अन्य विकल्प क्या हैं? हम <head>
अनुभाग में एक <script>
टैग में यह नहीं कर सकते, क्योंकि उस बिंदु पर हम डोम उपयोग नहीं कर सकते क्योंकि पेज अभी तक लोड नहीं किया है:
<head>
<script type = "text/javascript">
var myButton = document.getElementById("mybutton"); // myButton is null!
</script>
</head>
हम पर एक <script>
टैग लगाते हैं करें पृष्ठ या कुछ के नीचे? पसंद:
<html>
<body>
...
...
<script type = "text/javascript">
registerAllEventHandlers();
</script>
</body>
</html>
यहां सबसे अच्छा अभ्यास क्या है?
-1: 'window.onload' घटना jQuery की 'तैयार' घटना का उपयोग करने के बराबर नहीं है: पृष्ठ बंद होने पर 'window.onload' आग लग जाएगी, जिसमें सभी बाहरी संसाधन (छवियां, सीएसएस इत्यादि) शामिल हैं, जबकि HTML के लोड होने के बाद jQuery के 'तैयार' ईवेंट आग लग जाएगा लेकिन बाहरी संसाधनों से पहले। 'Window.onload' का उपयोग करना एक बुरा विचार है, क्योंकि कई मामलों में (कई छवियां, धीमी कनेक्शन इत्यादि) जावास्क्रिप्ट ईवेंट लंबे समय तक पंजीकृत नहीं होंगे। – georgebrock
@ स्लेबेटमैन: क्या आप विस्तार कर सकते हैं कि छवियों (आदि) लोड होने से पहले और दो अलग-अलग तकनीकों के बीच मतभेदों को समझने से पहले जेएस इवेंट हैंडलर संलग्न करना मूर्ख क्यों है? ऐसी साइट पर जो जानकारी सीखने और साझा करने के बारे में है, एक टिप्पणी कह रही है कि "वह बेवकूफ" बहुत रचनात्मक नहीं है। – georgebrock