Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z podwójnym window.onload
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
szymek001
Witam,

Posiadam jeden javascript który jest ładowany na wszystkich podstronach, drugi chcę załadować tylko na jednej.
Oba mają osobną funkcję: window.onload jednak ładowany jest zawsze tylko ten pierwszy.

Póki co zrobiłem to tak:
  1. window.onload = function(){
  2. funkcja1();
  3. funkcja2();
  4. }


i gdy umieszcze oba skrypty w jednym pliku to wszystko działa w porządku...

W jaki sposób zrobić to tak, by funkcja2 wywoływała drugi (w oddzielnym pliku) skrypt tylko na określonej stronie bez kolidowania ze skryptem pierwszym, który występuje na wszystkich podstronach?
toaspzoo
A co chcesz osiągnąć w ten sposób ?
kamil4u
Dzieje się tak, gdyż konstrukcja window.onload = nadpisuje starą funkcję.

Najlepiej to zrobić przez dodawanie zdarzeń zgodnie z DOM-em. Nie wdając się w szczegóły wpisz w Google "add event js" i dostaniesz gotową funkcję, używającą addEventListener( dla nie IE ) i attachEvent( dla IE ).

Inną trochę gorszą metodą jest http://www.htmlgoodies.com/beyond/javascri...d-Functions.htm
szymek001
Jeden window.onload mam do ładowania shoutboxa, na jednej stronie wyświetlam komunikat skryptem: http://jsfiddle.net/FnY7x/9/
  1. #msgs { width: 600px; height:300px; border:3px groove #555;
  2. background-color: black; color: #0E0; padding: 6px;}
  3. // utility cover function
  4. function get(eid ) {return document.getElementById( eid );};
  5. // put the messages you want to display in serial order from
  6. // top to bottom - all but last need a trailing comma
  7. var msgs = [
  8. 'PCI:Using IRQ router PIXX [8086/7710] at 00:07.0',
  9. 'PCI: Found IRQ 10 for device 00:11.0',
  10. 'yada',
  11. 'yada',
  12. 'yada'
  13. ];
  14. // set number of msecs to delay between messages
  15. var msgDelay = 500;
  16. // add a single message to the screen
  17. function drawMsg( i ) {
  18. get( 'msgs' ).innerHTML += msgs[ i ] + '<br ' +'/>';
  19. };
  20. // process the msgs array to add all messages with a delay
  21. // interval between each
  22. function drawMsgs() {
  23. var last = msgs.length;
  24. // first message is written immediately with this loop
  25. for (var i = 0; i < last; i++) {
  26. // to delay all messages, including first, use...
  27. // for (var i = 1; i <= last; i++) {
  28. setTimeout('drawMsg(' + i + ')', msgDelay*i);
  29. }
  30. };
  31. // start message loading process, once window is loaded
  32. window.onload = drawMsgs;
  33. <p id="msgs"></p>


Oprócz tego korzystam z jquery-1.7.min.js (menu itp. pierdoły), czy jest jakaś inna opcja na wyświetlenie takiego komunikatu?
kamil4u
Zacząłeś jeden temat dostałeś odpwiedź i nie napisałeś czy coś z tym zrobiłeś. Jak używasz jQuery to użyj zdarzenia związanego z DOM-em: http://api.jquery.com/ready/

Poprzedniego pytania nie rozumiem. Co chcesz osiągnąć? Co to za kod. Co on robi? Skoro używasz już http://jsfiddle.net/ to używaj go poprawnie - osbno HTML, CSS i JS
szymek001
w tym problem, że gdy w kodzie którym podałem próbuje użyć ready zamiast window.onload to nic się nie dzieje..

Kod
window.onload = drawMsgs;


zamieniałem na:

Kod
$(document).ready(function () {
  drawMsgs;;
});


próbowałem też:

Kod
$(document).ready(function (drawMsgs));


jednak nic z tego.. nie moge używać osobno w obecnej postaci bo tak nie działa, jakby się tak dało to bym nie zakładał tego tematu..

__
edit:

działa:
Kod
$(document).ready(function () {drawMsgs();
});


jednak skrypt włącza się zanim załadują się obrazki itp. elementy strony..
kamil4u
Nie działa, bo w ogóle nie znasz JS. Przeczytaj pierwszy lepszy kurs. Mógłbym Ci dać gotowca, bo to jedna linia, ale tego nie zrobię.

Porady:
- przeczytaj kurs podstaw JS, bo nie masz pojęcia o tym języku
- konsola błędów JS, wskaże Ci niewłaściwą linię i błąd składni
- następnie patrzysz na przykłady jQuery podane przez wujka Google - Wystarczy wpisać w Google "jQuery ready funkcja" i poczytać t artykuły + popatrzeć na kod.

I nie obrażaj się na mnie i nie pisz "jak nie chcesz to nie pomagaj", bo to właśnie jest pomoc. A Ty jesteś leń i czekasz na gotowca. Oczywiście zdaję sobie sprawę, że jesteś początkujący, ale linia: drawMsgs;; wskazuje, że nawet nie przeczytałeś o podstawach JS.

Na pewno sobie poradzisz, bo jesteś blisko, ale trzeba trochę poczytać. Nic nie ma od razu.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.