2011-02-22 11 views
25

के भीतर जावास्क्रिप्ट द्वारा लोड करें हम अपने दस्तावेज़ में Google मानचित्र API से नक्शे शामिल करना चाहते हैं। दस्तावेज शरीर के ऑनलोड() घटना द्वारा बुलाए गए फ़ंक्शन के साथ मानचित्र को प्रारंभ करने के लिए कहता है।शरीर के लिए ईवेंट हैंडलर जोड़ें। <body> भाग

साधारण तरीका कॉल करने के लिए:

<body onload="initialize_map();"> 

यह हमारे लिए काम नहीं करता है क्योंकि हम खाका :: टूलकिट का उपयोग कर रहे हैं और <body> टैग पहले से ही हमारे आवरण में शामिल है। संक्षेप में: <body> टैग पहले ही मुद्रित होता है जब हमारे जावास्क्रिप्ट कोड चलने लगते हैं।

मैंने ऐसा कुछ करने की कोशिश की लेकिन यह केवल onclick के लिए काम करता है, onload नहीं। मुझे लगता है कि ऐसा इसलिए है क्योंकि जावास्क्रिप्ट कोड <body> टैग के नीचे है।

var body = document.getElementsByTagName("body")[0]; 

body.addEventListener("load", init(), false); 

function init() { 
     alert("it works!"); 
}; 

कोई भी सहायता Google मानचित्र मानचित्र को कैसे आग लगाना है!

उत्तर

8

:

+0

कभी भी आग लग सकती है ' फ़ंक्शन() {init();}); 'उपलब्ध। –

+10

भी आसान होगा '$ (init); ' –

34
body.addEventListener("load", init(), false); 

कि init() कह रहा है कि यह फ़ंक्शन अब चल रहा है और जो भी लोड ईवेंट पर लौटाता है उसे असाइन करें।

आप जो चाहते हैं वह फ़ंक्शन के संदर्भ को असाइन करना है, न कि परिणाम। तो आपको() छोड़ना होगा।

body.addEventListener("load", init, false); 

इसके अलावा, आप window.onload का उपयोग करना चाहिए और body.onload नहीं

addEventListener अधिकांश ब्राउज़र except IE 8 में समर्थित है। हम पहले से ही एक ग्राफिकल आंख कैंडी सुविधा हम इस का उपयोग कर समाप्त हो गया के लिए jQuery उपयोग कर रहे थे के रूप में

window.onload = function(){ 
    // your code here 
} 
+2

IE के लिए यह होगा 'attachEvent'। quirksmode.org इसे बहुत अच्छी तरह से वर्णन करता है: http://quirksmode.org/js/events_advanced.html –

+1

यह निश्चित रूप से अनुकूल है – WebWanderer

2

आप कोड आप खिड़की वस्तु की ऑनलोड घटना में निष्पादित करने के लिए चाहते हैं लपेट दें।

$(document).ready(function() { 
    // any code goes here 
    init(); 
}); 

ने जो कुछ भी हम चाहते थे वह किया और ब्राउज़र की असंगतताओं के बारे में परवाह करता है।

+12

इस दृष्टिकोण के साथ 2 संभावित समस्याएं हैं। 1) आप किसी अन्य ऑनलोड घटनाओं को ओवर-राइट करते हैं जो संलग्न हो सकते हैं, और 2) होल्डलोड पहले से ही निकाल दिया जा सकता है कि आप इस कोड को कहां रखते हैं, और नतीजतन – Matt

18

@epascarello W3C मानक ब्राउज़र के लिए उल्लेख किया है, आप का उपयोग करना चाहिए:

body.addEventListener("load", init, false); 

हालांकि, अगर आप यह आईई < 9 पर काम करना चाहता रूप में अच्छी तरह आप का उपयोग कर सकते हैं:

var prefix = window.addEventListener ? "" : "on"; 
var eventName = window.addEventListener ? "addEventListener" : "attachEvent"; 
document.body[eventName](prefix + "load", init, false); 

या यदि आप इसे एक पंक्ति में चाहते हैं:

document.body[window.addEventListener ? 'addEventListener' : 'attachEvent'](
    window.addEventListener ? "load" : "onload", init, false); 

नोट: यहां मुझे सीधा संदर्भ मिलता है दस्तावेज़ के माध्यम से शरीर तत्व, पहली पंक्ति की आवश्यकता को बचा रहा है।

इसके अलावा, यदि आप jQuery का उपयोग कर रहे हैं, और आप load एस के बजाए DOM ready ईवेंट का उपयोग करना चाहते हैं, तो उत्तर भी छोटा हो सकता है ...

$(init); 
21

आप वास्तव में के बजाय निम्नलिखित (सभी नए ब्राउज़रों में काम करता है) का उपयोग करना चाहिए:

window.addEventListener('DOMContentLoaded', init, false); 
+1

http://caniuse.com/#search=DOMContentLoaded – camou

+0

यह क्यों काम नहीं करता है? 'document.addEventListener ('load', init, false);' – Luke

+2

@Luke आपको उस घटना को खिड़की पर बांधना चाहिए: 'window.addEventListener ('load', init, false);' –

संबंधित मुद्दे