कई विंडो जोड़ें। घटनाओं को डाउनलोड करें

मेरे एएसपी.NET उपयोगकर्ता नियंत्रण में मैं कुछ जावास्क्रिप्ट window.onload ईवेंट में जोड़ रहा हूं:

if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
  Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);            

मेरी समस्या यह है कि अगर onload ईवेंट में पहले से कुछ है, तो इससे ओवरराइट हो जाता है। onload ईवेंट में प्रत्येक उपयोगकर्ता को जावास्क्रिप्ट निष्पादित करने के लिए दो उपयोगकर्ता नियंत्रणों को अनुमति देने के बारे में मैं कैसे जाउंगा?

Edit: Thanks for the info on third party libraries. I'll keep them in mind.

0
ro fr bn
हमें कोई बदबूदार पुस्तकालयों की आवश्यकता नहीं है! फाईफॉक्स के लिए fyi, इसकी खिड़की .attachEvent ('लोड', myFunction); window.attachEvent नहीं ('अधिभार', मेरा कार्य);
जोड़ा लेखक Frank Schwieterman, स्रोत

9 उत्तर

क्या आपने jQuery जैसे कुछ का उपयोग करने पर विचार किया है जो एकाधिक ईवेंट हैंडलर जोड़ने की सफाई के लिए एक ढांचा प्रदान करता है?

0
जोड़ा
क्या आप शायद इस पर विस्तार कर सकते हैं?
जोड़ा लेखक adhanlon, स्रोत

अभी भी एक बदसूरत समाधान है (जो एक ढांचे या addEventListener / attachEvent ) का उपयोग करने के लिए बहुत कम है जो वर्तमान onload ईवेंट को सहेजना है:

function addOnLoad(fn)
{ 
   var old = window.onload;
   window.onload = function()
   {
       old();
       fn();
   };
}

addOnLoad(function()
{
  //your code here
});
addOnLoad(function()
{
  //your code here
});
addOnLoad(function()
{
  //your code here
});

ध्यान दें कि jQuery जैसे ढांचे को डीओएम तैयार होने पर कोड निष्पादित करने का तरीका प्रदान करेगा और पृष्ठ लोड होने पर नहीं।

तैयार होने का मतलब है कि आपका एचटीएमएल लोड हो गया है लेकिन बाहरी घटकों जैसे छवियों या स्टाइलशीट्स, जो आपको लोड इवेंट की आग से पहले लंबे समय तक बुलाया जा सकता है।

0
जोड़ा

इसे इस्तेमाल करे:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
   //do something
}

संपादित करें: अरे, मैं सिर्फ फ़ायरफ़ॉक्स के साथ लॉग इन करने के लिए तैयार हो रहा था और इसे स्वयं सुधार सकता हूं! अभी भी आईई 7 के साथ मेरे लिए कोड प्रारूपित प्रतीत नहीं होता है।

0
जोड़ा

मुझे एएसपी.नेट के बारे में बहुत कुछ पता नहीं है, लेकिन ऑनलोड ईवेंट के लिए कस्टम फ़ंक्शन क्यों नहीं लिखते हैं जो बदले में आपके लिए दोनों कार्यों को कॉल करता है? यदि आपके पास दो कार्य हैं, तो उन्हें ईवेंट के लिए पंजीकृत एक तीसरी स्क्रिप्ट से कॉल करें।

0
जोड़ा

असल में, यह एमएसडीएन पृष्ठ के अनुसार, ऐसा लगता है कि आप एकाधिक स्क्रिप्ट पंजीकृत करने के लिए इस फ़ंक्शन को कई बार कॉल कर सकते हैं। आपको बस अलग-अलग कुंजियों (दूसरी तर्क) का उपयोग करने की आवश्यकता है।

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key1, function1, true);

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true);

मेरा मानना ​​है कि काम करना चाहिए।

0
जोड़ा
जब पेज उन्हें प्राप्त होता है तो इन स्क्रिप्ट को निष्पादित नहीं किया जाता है? अधिभार के दौरान नहीं?
जोड़ा लेखक Ray, स्रोत

आप jQuery के साथ ऐसा कर सकते हैं

$(window).load(function() {
   //jQuery functions to initialize after the page has loaded.
});
0
जोड़ा

Mootools is another great JavaScript framework which is fairly easy to use, and like RedWolves said with jQuery you can can just keep chucking as many handlers as you want.

प्रत्येक * .js फ़ाइल के लिए मैं शामिल करता हूं मैं सिर्फ एक फ़ंक्शन में कोड लपेटता हूं।

window.addEvent('domready', function(){
    alert('Just put all your code here');
});

And there are also advantages of using domready instead of onload

0
जोड़ा

सुझाए गए अधिकांश "समाधान" माइक्रोसॉफ्ट-विशिष्ट हैं, या ब्लोटेड पुस्तकालयों की आवश्यकता है। यहाँ एक अच्छा तरीका है। यह डब्ल्यू 3 सी-अनुरूप ब्राउज़र और माइक्रोसॉफ्ट आईई के साथ काम करता है।

if (window.addEventListener)//W3C standard
{
  window.addEventListener('load', myFunction, false);//NB **not** 'onload'
} 
else if (window.attachEvent)//Microsoft
{
  window.attachEvent('onload', myFunction);
}
0
जोड़ा
क्षमा करें महोदय, एनबी नहीं 'ऑनलोड' का अर्थ क्या है?
जोड़ा लेखक meJustAndrew, स्रोत
नोट: window.attachEvent ('ऑनलोड', myFunction) में फ़ंक्शन असाइन किया गया (myFunction); window.onload को आवंटित किसी भी फ़ंक्शन के बाद हमेशा निकाल दिया जाता है
जोड़ा लेखक user961954, स्रोत
@meJustAndrew का मतलब है कि जब आप addEventListener का उपयोग करते हैं तो आप 'ऑनलोड' का उपयोग नहीं करते हैं, तो आप केवल 'लोड' का उपयोग करते हैं।
जोड़ा लेखक fmacdee, स्रोत

मुझे आज भी इसी तरह की समस्या थी इसलिए मैंने इसे निम्नलिखित के साथ index.js हल किया:

window.onloadFuncs = [];

window.onload = function()
{
 for(var i in this.onloadFuncs)
 {
  this.onloadFuncs[i]();
 }
}

और अतिरिक्त जेएस फाइलों में जो मैं ऑनलोड ईवेंट संलग्न करना चाहता हूं, मुझे बस यह करना है:

window.onloadFuncs.push(function(){
//code here
});

मैं आमतौर पर jQuery का उपयोग करता हूं, लेकिन इस बार मैं शुद्ध जेएस तक सीमित था, जिसने थोड़ी देर के लिए अपने दिमाग का उपयोग करने के लिए मजबूर किया!

0
जोड़ा