HighDots Forums  

Solito conflitto con UnLoad e simili..

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss Solito conflitto con UnLoad e simili.. in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Pinko
 
Posts: n/a

Default Solito conflitto con UnLoad e simili.. - 01-09-2006 , 11:33 AM






Salve, mi trovo con l'ennesimo problema del conflitto di due script
che fanno uso di javascript mediante "OnLoad" e in alcuni casi di
"OnUnload" all'interno della stessa pagina o cmq nel body!
Si tratta uno, il famoso script NiftCorners che mi permette di avere
dei box con gli angoli arrotondati utilizzando Javascript in accoppiata
dei css, l'altro Sylesheets sempre in javascript e css mi permette
di selezionare un diverso layout al sito mantenendo quello selezionato
anche per i successivi accessi!
Per venirmi incontro vi posto il codice per poter meglio risolvere il
problema.
Per ognuno di essi vengono richiamati gli script dall'esterno e si
compongono dei seguenti file e codice:
Script: NiftCorners

Codice Nift.js:
function NiftyCheck(){
if(!document.getElementById || !document.createElement)
return(false);
var b=navigator.userAgent.toLowerCase();
if(b.indexOf("msie 5")>0 && b.indexOf("opera")==-1)
return(false);
return(true);
}

function Rounded(selector,bk,color,size){
var i;
var v=getElementsBySelector(selector);
var l=v.length;
for(i=0;i<l;i++){
AddTop(v[i],bk,color,size);
AddBottom(v[i],bk,color,size);
}
}

function RoundedTop(selector,bk,color,size){
var i;
var v=getElementsBySelector(selector);
for(i=0;i<v.length;i++)
AddTop(v[i],bk,color,size);
}

function RoundedBottom(selector,bk,color,size){
var i;
var v=getElementsBySelector(selector);
for(i=0;i<v.length;i++)
AddBottom(v[i],bk,color,size);
}

function AddTop(el,bk,color,size){
var i;
var d=document.createElement("b");
var cn="r";
var lim=4;
if(size && size=="small"){ cn="rs"; lim=2}
d.className="rtop";
d.style.backgroundColor=bk;
for(i=1;i<=lim;i++){
var x=document.createElement("b");
x.className=cn + i;
x.style.backgroundColor=color;
d.appendChild(x);
}
el.insertBefore(d,el.firstChild);
}

function AddBottom(el,bk,color,size){
var i;
var d=document.createElement("b");
var cn="r";
var lim=4;
if(size && size=="small"){ cn="rs"; lim=2}
d.className="rbottom";
d.style.backgroundColor=bk;
for(i=lim;i>0;i--){
var x=document.createElement("b");
x.className=cn + i;
x.style.backgroundColor=color;
d.appendChild(x);
}
el.appendChild(d,el.firstChild);
}

function getElementsBySelector(selector){
var i;
var s=[];
var selid="";
var selclass="";
var tag=selector;
var objlist=[];
if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
s=selector.split(" ");
var fs=s[0].split("#");
if(fs.length==1) return(objlist);
return(document.getElementById(fs[1]).getElementsByTagName(s[1]));
}
if(selector.indexOf("#")>0){ //id selector like "tag#id"
s=selector.split("#");
tag=s[0];
selid=s[1];
}
if(selid!=""){
objlist.push(document.getElementById(selid));
return(objlist);
}
if(selector.indexOf(".")>0){ //class selector like "tag.class"
s=selector.split(".");
tag=s[0];
selclass=s[1];
}
var v=document.getElementsByTagName(tag); // tag selector like "tag"
if(selclass=="")
return(v);
for(i=0;i<v.length;i++){
if(v[i].className==selclass){
objlist.push(v[i]);
}
}
return(objlist);
}

Codice Layout.js:
window.onload=function(){
if(!NiftyCheck())
return;
RoundedTop("div.contenuto","#F0F0F0","#E7E7E7");
RoundedBottom("div.contenuto","#F0F0F0","#E7E7E7") ;
RoundedTop("div.box1dx","#F0F0F0","#999999","small ");
RoundedBottom("div.box1dx","#F0F0F0","#CCCCCC","sm all");
RoundedTop("div.box2dx","#F0F0F0","#999999","small ");
RoundedBottom("div.box2dx","#F0F0F0","#CCCCCC","sm all");
RoundedTop("div.box3dx","#F0F0F0","#999999","small ");
RoundedBottom("div.box3dx","#F0F0F0","#E7E7E7","sm all");
RoundedTop("div.box4dx","#F0F0F0","#999999","small ");
RoundedBottom("div.box4dx","#F0F0F0","#CCFF66","sm all");
RoundedTop("div.box1sx","#F0F0F0","#999999","small ");
RoundedBottom("div.box1sx","#F0F0F0","#E5ECF9","sm all");
RoundedTop("div.box2sx","#F0F0F0","#999999","small ");
RoundedBottom("div.box2sx","#F0F0F0","#E5ECF9","sm all");
RoundedTop("div.box3sx","#F0F0F0","#999999","small ");
RoundedBottom("div.box3sx","#F0F0F0","#E5ECF9","sm all");
RoundedTop("div.box4sx","#F0F0F0","#999999","small ");
RoundedBottom("div.box4sx","#F0F0F0","#E5ECF9","sm all");
RoundedTop("div.box5sx","#F0F0F0","#999999","small ");
RoundedBottom("div.box5sx","#F0F0F0","#CCFF66","sm all");
RoundedTop("div.boxinfo","#F0F0F0","#CCCCCC","smal l");
RoundedBottom("div.boxinfo","#F0F0F0","#CCCCCC","s mall");
Rounded("div#formg","#E7E7E7","#CCCCCC");
Rounded("div#formc","#E7E7E7","#CCCCCC");
Rounded("label","#CCCCCC","#F0F0F0","small");
RoundedBottom("div#footer","#A6A4A6","#E5ECF9","5" );
}
Oltre a questi due naturalmente vi è anche il css che non ha
importanza in questa sede!
L'altro...

Script Sylesheets

Codice SyleSwap:
// JavaScript Document



//function changeSheet performs the style swap when given a title



function changeSheet(theSheet) {

if(document.styleSheets){

var c = document.styleSheets.length;

for(var i=0;i<c;i++){

if(document.styleSheets[i].title!=theSheet){

document.styleSheets[i].disabled=true;

}else{

document.styleSheets[i].disabled=false;

}

}

}

}
Quest'ultimo inoltre viene richiamato nel body in questo modo:
<body onload= "pageLoad()" onUnload="applyChange()">
ed è quello che funziona non facendo vedere gli angoli
arrotondati...Quindi va in comflitto!!
Come risolvere??
Per un riferimento potete vederlo all'indirizzo http://www.medief.com
Grazie per la collaborazione


Reply With Quote
  #2  
Old   
ZER0
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 11:40 AM






On 9 Jan 2006 08:33:49 -0800, Pinko wrote:

Quote:
Salve, mi trovo con l'ennesimo problema del conflitto di due script
che fanno uso di javascript mediante "OnLoad" e in alcuni casi di
"OnUnload" all'interno della stessa pagina o cmq nel body!
Non era necessario riportare tutto il codice, bastava il pezzo inerente
all'onload/onunload.

Quote:
Codice Layout.js:
Trasforma la seguente riga:

Quote:
window.onload=function(){
In

fuction NiftyLoad(){
Quote:
if(!NiftyCheck())
return;
RoundedTop("div.contenuto","#F0F0F0","#E7E7E7");
etc.. lasciando il resto inalterato.

Quote:
Quest'ultimo inoltre viene richiamato nel body in questo modo:
body onload= "pageLoad()" onUnload="applyChange()"

Elimina dal body questi due attributi, lasciando solo <body>.
E aggiungi invece in coda a tutte le funzioni js, dentro il tag script sempre:

window.onload=function(){
NiftyLoad();
pageLoad();
}
window.onunload=function(){
applyChange();
}

In sostanza: invece di assegnare direttamente all'onload la funzione per gli
angoli arrotondati, gli abbiamo dato un nome.
In questo modo la invochiamo, assieme a pageLoad, da una funzione anonima
assegnata all'event-handler onload.

Così facciamo felici tutt'eddue.

--
~ "Viviamo dei vuoti lasciati da qualcun'altro."



Reply With Quote
  #3  
Old   
Pinko
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 11:44 AM



Ok, grazie, gentilissimo adesso applico subito le tue modifiche!


Reply With Quote
  #4  
Old   
Pinko
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 01:39 PM



Allora ho provato come hai detto, ma non funziona! quindi ti chiedo
conferma se ho capito bene..L'ultima parte che dici di inserire in coda
a tutte le funzioni, deve essere inserita all'interno degli script che
richiamo esternamente..esempio
<script type="text/javascript"
src="../javascript/layout.js">codice</script> , o devo inserirlo dopo
il body richiamandoli sempre all'interno del tag <script>?
Ho provato in entrambi i casi ma non funziona...non so dimmi te dove
sbaglio. Grazie per l'attenzione


Reply With Quote
  #5  
Old   
Pinko
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 02:03 PM



Allora ho provato come hai detto, ma non funziona! quindi ti chiedo
conferma se ho capito bene..L'ultima parte che dici di inserire in coda
a tutte le funzioni, deve essere inserita all'interno degli script che
richiamo esternamente..esempio
<script type="text/javascript"
src="../javascript/layout.js">codice</script> , o devo inserirlo dopo
il body richiamandoli sempre all'interno del tag <script>?
Ho provato in entrambi i casi ma non funziona...non so dimmi te dove
sbaglio. Grazie per l'attenzione


Reply With Quote
  #6  
Old   
Pinko
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 02:03 PM



Allora ho provato come hai detto, ma non funziona! quindi ti chiedo
conferma se ho capito bene..L'ultima parte che dici di inserire in coda
a tutte le funzioni, deve essere inserita all'interno degli script che
richiamo esternamente..esempio
<script type="text/javascript"
src="../javascript/layout.js">codice</script> , o devo inserirlo dopo
il body richiamandoli sempre all'interno del tag <script>?
Ho provato in entrambi i casi ma non funziona...non so dimmi te dove
sbaglio. Grazie per l'attenzione


Reply With Quote
  #7  
Old   
Nando
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 03:10 PM



Pinko <webm.franco (AT) gmail (DOT) com> ha scritto:

Quote:
Salve,
Ciao. Innanzitutto, zer0 ti ha dato le informazioni necessarie, pero' devi
fare un po' di sforzo per capirle e applicarle al tuo caso... detto questo,
noto che hai postato un bel po' di codice ma della funzione pageLoad che
indichi qui:

Quote:
body onload= "pageLoad()" onUnload="applyChange()"
non v'e' traccia alcuna... e' definita?
Poi, ho dato un occhio velocissimo al link che hai postato e ho visto che
hai modificato il tag body in questo modo:

<body onload= "pageLoad()" "NiftyCheck()" onUnload="applyChange()">

C'e' un errore: non puoi scrivere "pageLoad()" "NiftyCheck()", e' un errore
di sintassi. Inoltre, credo che NiftyCheck non faccia proprio niente di
utile... quello che ti interessa e' questo:

Quote:
Codice Layout.js:
window.onload=function(){
if(!NiftyCheck())
return;
RoundedTop("div.contenuto","#F0F0F0","#E7E7E7");
[...]
RoundedBottom("div#footer","#A6A4A6","#E5ECF9","5" );
}
Cioe', questa e' la funzione da eseguire al caricamento della pagina per
ottenere gli angoli arrotondati (bah... vabbe', de gustibus...).

Fatte queste premesse, veniamo a una possibile soluzione (ammettendo pero'
che la funzione pageLoad esista davvero e che non esistano altre
assegnazioni all'handler dell'evento onload)

1) Cambia la riga:
window.onload=function() {
che ti ho indicato sopra con:
function angoliArrotondati() {
Cambia solo la riga, nient'altro
2) Elimina gli attributi onload e onunload dal tag body, cioe' scrivi solo:
<body>
3) Sposta questa roba:
<script type="text/javascript" src="javascript/tooltip.js"></script>
<script type="text/javascript" src="javascript/fontSize.js"></script>
<script type="text/javascript" src="javascript/nifty.js"></script>
<script type="text/javascript" src="javascript/layout.js"></script>
<script type="text/javascript" src="javascript/styleSwap.js"></script>
all'interno dal tag head (cioe', prima di </head>)
4) immediatamente dopo queste righe, e quindi sempre prima di </head>,
metti:
<script type="text/javascript">
//<![CDATA[
window.onload=function() {
pageLoad();
angoliArrotondati();
};
window.onunload=function {
applyChange();
};
//]]>
</script>

Il tutto dorebbe funzionare, ribadisco, *sempre che non vi siano altre
istruzioni del tipo window.onload=function... nei file js esterni!!!*

Prova e vedi se va. Nel caso, un bonifico sul conto
9876942798749287984729879824987972 e' ben accetto
Se ho scritto cazzate, chiedo venia.

--
Nando [?]
Ex-Apostolo della Ex-Prova


Reply With Quote
  #8  
Old   
cedmax
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 05:16 PM



Nando ha scritto:

Quote:
Prova e vedi se va.
azz, ma tu fino a qualche giorno fa non ti vendevi come newbie?



ced


Reply With Quote
  #9  
Old   
Pinko
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-09-2006 , 05:21 PM



Ok funziona, rispettando il post di ZERO, ma credo sia simile anche per
te NANDO.
Si non avevo postato bene il codice la funzione pageLoad è definta.
Solo che ora si presenta questo: Gli ngoli arrotondati si vedono, si
applica lo stylesheet per il layout, ma quando faccio aggiorna o cambio
pagina ritorna al layout iniziale, cosa che non deve accadere. Proprio
in questo caso che la funzione applyChange dovrebbe funzionare..come si
fa??

Newbie??? ma quando mai...


Reply With Quote
  #10  
Old   
ZER0
 
Posts: n/a

Default Re: Solito conflitto con UnLoad e simili.. - 01-10-2006 , 03:16 AM



On 9 Jan 2006 14:21:21 -0800, Pinko wrote:

Quote:
Solo che ora si presenta questo: Gli ngoli arrotondati si vedono, si
applica lo stylesheet per il layout, ma quando faccio aggiorna o cambio
pagina ritorna al layout iniziale, cosa che non deve accadere.
Proprio
in questo caso che la funzione applyChange dovrebbe funzionare..come si
fa??
Se hai scritto correttamente il codice, dovrebbe funzionarti. Ovvero, dovresti
avere qualcosa del tipo:

window.onunload=function(){
applyChange();
}

nel tuo codice.
Puoi verificare che l'event-handler venga invocato, e che la funzione
applyChange sia definita:

window.onunload=function(){
alert( window.applyChange )
applyChange();
}

Se l'event-handler viene invocato e la funzione è definita, dovrebbe
visualizzarti un alert con il contenuto della stessa. Se non ti viene
visualizzato alcun alert, non viene invocato l'event-handler; se ti risponde
invece "undefined" significa che la funzione non è definita.

In ogni caso, prova a pubblicare online i sorgenti aggiornati, e vediamo cosa
c'è che non va.


--
~ "Viviamo dei vuoti lasciati da qualcun'altro."



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.