سؤال

في بلدي ASP.NET المستخدم التحكم انا إضافة بعض جافا سكريبت إلى window.onload الحدث:

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

مشكلتي هي, إذا كان هناك بالفعل شيء في onload حدث من هذا ينمق.كيف اذهب حول السماح اثنين من عناصر تحكم المستخدم إلى كل تنفيذ جافا سكريبت في onload الحدث ؟

تحرير: شكرا على معلومات عن طرف ثالث المكتبات.أنا الاحتفاظ بها في الاعتبار.

هل كانت مفيدة؟

المحلول

أكثر من "الحلول" المقترحة هي مايكروسوفت محددة ، أو تتطلب المتضخمة المكتبات.هنا طريقة واحدة جيدة.هذا يعمل مع W3C-متوافق مع المتصفحات و مع مايكروسوفت إنترنت إكسبلورر.

if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}

نصائح أخرى

لا يزال هناك قبيحة الحل (الذي هو أدنى بكثير باستخدام إطار أو 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
});

علما أن أطر مثل مسج سوف توفر وسيلة إلى تنفيذ التعليمات البرمجية عندما دوم جاهز وليس عند تحميل الصفحة.

دوم الاستعداد يعني HTML تحميل ولكن لا عناصر خارجية مثل الصور أو الأنماط ، مما يسمح لك أن يكون دعا قبل فترة طويلة من الحدث load الحرائق.

كان لي مشكلة مماثلة اليوم لذا حلها بعد index.js التالية:

window.onloadFuncs = [];

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

وفي إضافية js الملفات التي كنت ترغب في إرفاق الحدث onload أنا فقط يجب أن تفعل هذا:

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

أنا عادة استخدام مسج الرغم من ذلك ، ولكن هذه المرة كنت مقيدة نقية شبيبة اللي تبونه اضطر إلى استخدام ذهني لفترة من الوقت!

Mootools عظيم آخر جافا سكريبت إطار سهلة الاستخدام إلى حد ما ، مثل RedWolves قال مع مسج يمكنك يمكن فقط الحفاظ على الرمي العديد من معالجات كما تريد.

كل *.ملف js لا تشمل فقط التفاف التعليمات البرمجية في الدالة.

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

و هناك أيضا مزايا استخدام domready بدلا من onload

جرب هذا:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

تحرير:لقد كنت مجرد الحصول على استعداد لتسجيل الدخول مع فايرفوكس و تهيئة هذا بنفسي!لا يزال لا يبدو على شكل رمز بالنسبة لي مع IE7.

أنا لا أعرف الكثير عن ASP.NET لكن لماذا لا تكتب دالة مخصصة لهذا الحدث onload وهذا بدوره يدعو كل من المهام بالنسبة لك ؟ إذا كنت قد حصلت على اثنين من وظائف الاتصال بهم سواء من ثلث النصي الذي قمت بالتسجيل لهذا الحدث.

هل تعتبر استخدام شيء من هذا القبيل مسج التي توفر إطارا التنظيف إضافة معالجات الأحداث متعددة?

في الواقع, وفقا هذا MSDN الصفحة, يبدو أنك يمكن استدعاء هذه الدالة عدة مرات إلى تسجيل عدة مخطوطات.تحتاج فقط إلى استخدام مفاتيح مختلفة (الحجة الثانية).

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

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

أعتقد أنه يجب أن تعمل.

أعرف أن هذا قد تم الرد عليها, ولكن أنا فقط أريدك أن تعرف عن هذه الوظيفة:

http://phrogz.net/JS/AttachEvent_js.txt

يتعلق T

يمكنك أن تفعل هذا مع مسج

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top