2012-03-26 2 views
2

Я использую две функции один из этого сайта http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/ и его с помощью вызова функции вроде этого:Два Javascript функций one window.onload = Custom.init; и одна window.onload = функция() {

window.onload = Custom.init; 

и после того, что я использую другой вызов функции, как это

window.onload = function() {... 

Второй убивает первый! Как мне изменить или сделать другой вызов на втором, чтобы они могли работать вместе?

ответ

2
window.onload = function() { 
    Custom.init(); 
    // ... 
}; 
+0

этот помог, но если поставить второй на первое место, как этот 'window.onload = function() { somefunction.init(); \t Custom.init(); }; ' – munge83

0

Вам нужно будет создать свою собственную функцию, которая называет их обоих.

window.onload = function(){ 
    Custom.init(); 
    function() { ... } 
} 
+0

Вы, конечно, не должны этого делать, а 'addEventListener' /' attachEvent' является более чистым. –

+0

@MatthewFlaschen Я бы действительно утверждал, что с тех пор вам не нужно обнаруживать поддерживаемую версию и предоставлять для нее два разных механизма. Хотя это может быть более «подходящим» для этого, это намного быстрее и чище, так как вы не беспокоитесь о поддержке интерфейса. – tkone

+0

Вот почему я рекомендовал jQuery или другую библиотеку. –

0

Мои предпочтения это:

loadFunctions = []; 
window.onload = function() {var x; while(x = loadFunctions.shift()) x();}; 

Затем, вместо того, чтобы window.onload, я:

loadFunctions.push(function() {...}); 

Конечно, я могу это сделать, потому что я m не использовать внешние библиотеки, которые могут мешать window.onload.

EDIT: Если вы не имеете контроля над одним из них, вы можете сделать это:

var ool = window.onload; 
window.onload = function() { 
    if(ool) ool(); 
    // new code here 
}; 
+0

немного лишний, здесь нет? – jAndy

+1

Вид, но он расширяемый^_^ –

0

вручную называют Custom.init?

window.onload = function() { 
    Custom.init(); 
    //your stuff 
}; 
0

Как насчет красивой маленькой обертки для всех обработчиков событий onLoad?

window.onLoadHandlers = []; 
window.onLoad = function() { 
    while (window.onLoadHandlers.length) { 
     window.onLoadHandlers.shift()(); 
    } 
}; 

Тогда просто нажать две функции этого массива:

window.onLoadHandlers.push(Custom.init); 
window.onLoadHandlers.push(function() { ... 

Вы можете хотя рассмотреть вопрос об использовании JQuery или любой другой библиотеки, которая обеспечивает лучшее решение для этого.

4

Используйте addEventListener/attachEvent. Вы можете использовать библиотеку, которая абстрагирует это, как JQuery:

$(window).load(function() { 
    // run code 
}); 

Это можно запускать несколько раз с различными функциями без проблем.

+0

Если бы он сказал jQuery, может быть уместен ответ jQuery.Но вопрос был конкретно в том, как это сделать в JavaScript. Загрузка библиотеки только для абстракции «addEventListener' /' attachEvent »немного переборщит .... – tkone

+0

Я думаю, что использование addEventListener/attachEvent - это путь ... конечно, IE использует одну номенклатуру, в то время как WebKit и FF используйте другой, так что вам нужно учитывать оба. Библиотека делает это так, что вам не нужно беспокоиться об этом, но потратить еще несколько минут, чтобы учесть их, тоже не так уж плохо. – Matt

+0

@tkone, я специально сказал, что он * может * сделать это, и я дал основные методы. Скорее всего, другие части его кода могут извлечь выгоду из библиотеки (она не должна быть jQuery). –

Смежные вопросы