HighDots Forums  

Problema con <span> generati tramite DOM

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


Discuss Problema con <span> generati tramite DOM in the Javascript (Italian) forum.



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

Default Problema con <span> generati tramite DOM - 08-23-2007 , 04:52 AM






Salve a tutti,
non sono un esperto in JavaScript e al mio primo tentativo di
realizzare qualcosa di più complesso mi sono arenato.
L'idea era quella di fare una foto gallery per il mio sito web in
javascript che permetta di aggiornare rapidamente i contenuti senza
mettere mai mano all'HTML e senza richiedere supporto server-side.

Dentro un file XML scrivo l'elenco delle immagini e una breve
descrizione. In seguito basta editare l'XML e aggiungere le foto; il
file XML viene caricato tramite AJAX, fin qui nessun problema.

Il problema sorge nel disegnare le anteprime delle immagini; in
pratica vorrei creare una struttura del tipo (almeno in prima istanza,
fatta funzionare questa vorrei qualcosa di più complesso, ad esempio
per generare uno sfondo
da usare come cornice dell'immagine)
<span> <a href...> <img...></img> </a> </span> per ognuna delle
immagini che andranno a popolare
il div contenitore. Questa struttura perfettamente funzionante se la
scrivo in HTML statico, generata tramite DOM
mi non funziona correttamente; i margini dello span non vengono
rispettati, il bordo della cornice attorno
collassa all'interno dell'immagine (!) nonostante le dimensioni dello
span siano uguali a quelle dell'immagine etc...
Se sostituisco allo span un div funziona correttamente, ma ognuna
delle antemprime è su una nuova riga, cosa che ovviamente vorrei
evitare. Un div con display: inline causa lo stesso problema dello
span.

Qualche consiglio ? Allego la parte di codice incriminato.

Se risolvo quando avrò completato la libreria la metterò a
disposizione di tutti :-)

Grazie



function drawThumbnail(number){

var img = createImage(images[number].LRsrc,images[number].title);
img.setAttribute('width', sizex);
img.setAttribute('height', sizey);

var anchor = document.createElement('a');
anchor.setAttribute('href', images[number].HRsrc);
anchor.setAttribute('target', '_blank');
anchor.appendChild(img);

var span = document.createElement('span');
span.style.width = sizex + 'px';
span.style.height = sizey + 'px';
span.setAttribute('id', 'thumb_' + number);
span.setAttribute('onmouseover', 'viewLegend(this,\'' +
images[number].title + '\',\'' + images[number].comments + '\');');
span.setAttribute('onmouseout', 'clearLegend(this);');
span.appendChild(anchor)

ele.appendChild(span);
}


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

Default Re: Problema con <span> generati tramite DOM - 08-23-2007 , 05:16 AM








Quote:
Se sostituisco allo span un div funziona correttamente, ma ognuna
delle antemprime è su una nuova riga, cosa che ovviamente vorrei
evitare. Un div con display: inline causa lo stesso problema dello
span.
risolto...ehmm colpa della mia ignoranza, non sapendo che gli elementi
inline non hanno come unica differenza l'andare a capo rispetto ai
block, ma anche altre cosettine sgradite :-)



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

Default Re: Problema con <span> generati tramite DOM - 08-24-2007 , 03:54 AM



....tuttavia ora ho un altro problema e per quanto ci abbia sbattuto la
testa più volte non sono riuscito a risolverlo.
Il codice seguente funziona con tutti browser che ho provato (Camino,
Firefox sia per windows che per mac, Safari) tranne
Internet Explorer.
In pratica genera dentro un DIV una serie di contenitori che
contengono un'immagine cliccabile, affiancati in linea finché nel DIV
c'è spazio
e separati solo dai pixel del loro margine. Cliccando sopra si apre un
link, mentre passandoci sopra il mouse appaiono delle informazioni
(vedere onmouseover). Tuttavia con IE succedono due cose:

1) Le immagini sono tutte appiccicate, il margine non viene applicato
2) Questione più GRAVE: le funzioni onmouseover NON funzionano. Non
vengono chiamate proprio! E' come se tutti gli attributi del DIV
generato, margini, dimensioni, funzioni associate non esistessero per
IE. Mi chiedo se il Div stesso esista...

Sto impazzendo per questa cosa, qualche idea ?


function drawThumbnail(number){

// Immagine
var img = createImage(//parametri);
img.setAttribute('width', sizex);
img.setAttribute('height', sizey);

// Link
var anchor = document.createElement('a');
anchor.setAttribute('href', //parametri);
anchor.setAttribute('target', '_blank');
anchor.appendChild(img);

// Contenitore
var span = document.createElement('div');
span.style.display = 'inline';
span.setAttribute('style', 'margin: 5px; border: 2px solid black;
float: left');
span.style.width = sizex + 'px';
span.style.height = sizey + 'px';
span.setAttribute('id', 'thumb_' + number);
span.setAttribute('onmouseover', 'viewLegend(this);');
span.setAttribute('onmouseout', 'clearLegend(this);');
span.appendChild(anchor);
//
Inserisci nella pagina
ele.appendChild(span);
}



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

Default Re: Problema con <span> generati tramite DOM - 08-24-2007 , 05:29 AM



Quote:
...tuttavia ora ho un altro problema e per quanto ci abbia sbattuto la
testa più volte non sono riuscito a risolverlo.
Il codice seguente funziona con tutti browser che ho provato (Camino,
Firefox sia per windows che per mac, Safari) tranne
Internet Explorer.
In pratica genera dentro un DIV una serie di contenitori che
contengono un'immagine cliccabile, affiancati in linea finché nel DIV
c'è spazio
e separati solo dai pixel del loro margine. Cliccando sopra si apre un
link, mentre passandoci sopra il mouse appaiono delle informazioni
(vedere onmouseover). Tuttavia con IE succedono due cose:

1) Le immagini sono tutte appiccicate, il margine non viene applicato
ma se crei una pagina in HTML "statico" senza JS, IE come si comporta?
Cioe' quello che voglio dire è che prima devi travare la soluzione HTML che
accontenti tutti (o cmq quelli che ti interessa) e poi lo sviluppi in JS...

Quote:
2) Questione più GRAVE: le funzioni onmouseover NON funzionano. Non
vengono chiamate proprio! E' come se tutti gli attributi del DIV
generato, margini, dimensioni, funzioni associate non esistessero per
IE. Mi chiedo se il Div stesso esista...
beh quello lo puoi controllare facilmente...

Quote:
Sto impazzendo per questa cosa, qualche idea ?
ok, vediamo....

Quote:
function drawThumbnail(number){

// Immagine
var img = createImage(//parametri);
img.setAttribute('width', sizex);
img.setAttribute('height', sizey);
va bene, io cmq li metteri negli style, anzi se non hai bisogno di uno
sconsigliabile ridimensionamento, non metterli per niente...

Quote:
// Link
var anchor = document.createElement('a');
anchor.setAttribute('href', //parametri);
anchor.setAttribute('target', '_blank');
anchor.appendChild(img);

// Contenitore
var span = document.createElement('div');
span.style.display = 'inline';
questo non serve, prova a toglierlo

Quote:
span.setAttribute('style', 'margin: 5px; border: 2px solid black;
float: left');
prova a definire lo style come hai fatto prima:
span.style.float = 'left';
....
come del resto fai sotto

Quote:
span.style.width = sizex + 'px';
span.style.height = sizey + 'px';
span.setAttribute('id', 'thumb_' + number);

span.setAttribute('onmouseover', 'viewLegend(this);');
span.setAttribute('onmouseout', 'clearLegend(this);');
questo è il solito problema devi dichiarare gli eventi con delle funzioni
anonime:
span.onmouseover = function(){viewLegend(this)};

Quote:
span.appendChild(anchor);
//
Inserisci nella pagina
ele.appendChild(span);
}
ah, io cambierei nome a quella variabile 'span', io eviterei sempre nomi
"riservati al HTML" e poi è traviente perche in realtÃ* si tratta di un div


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

Default Re: Problema con <span> generati tramite DOM - 08-24-2007 , 05:38 AM




Quote:
ma se crei una pagina in HTML "statico" senza JS, IE come si comporta?
Cioe' quello che voglio dire è che prima devi travare la soluzione HTMLche
accontenti tutti (o cmq quelli che ti interessa) e poi lo sviluppi in JS....
....provo

Quote:
beh quello lo puoi controllare facilmente...
come? Se indendi mettendoci un bordo, quella non è una prova
decisiva :-) Potrebbe collassarmelo ad un pixel sopra l'immagine,
ignorando le
dimensioni specificate, e avrei difficoltà a vederlo...è già successo.

Quote:
img.setAttribute('width', sizex);
img.setAttribute('height', sizey);

va bene, io cmq li metteri negli style, anzi se non hai bisogno di uno
sconsigliabile ridimensionamento, non metterli per niente...
ok

Quote:
span.style.display = 'inline';

questo non serve, prova a toglierlo
non serve secondo le specifiche W3C, ma serve per correggere un bug di
IE (!).
Se lo tolgo con gli altri browser non cambia nulla, con IE degenera
ulteriormente

Quote:
prova a definire lo style come hai fatto prima:
span.style.float = 'left';
proverò anche questo :-)
Quote:
...
come del resto fai sotto

questo è il solito problema devi dichiarare gli eventi con delle funzioni
anonime:
span.onmouseover = function(){viewLegend(this)};
dici che sia meglio? Ma perché devo mettere una funzione per chiamarne
a sua volta un'altra?

Quote:
ah, io cambierei nome a quella variabile 'span', io eviterei sempre nomi
"riservati al HTML" e poi è traviente perche in realtà si tratta di un div
....perché era uno span inizialmente :-) poi ho capito che con lo span
non si può fare e sono passato al div + float.

Grazie, ciao




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

Default Re: Problema con <span> generati tramite DOM - 08-24-2007 , 06:32 AM



Quote:
span.style.display = 'inline';

questo non serve, prova a toglierlo

non serve secondo le specifiche W3C, ma serve per correggere un bug di
IE (!).
Se lo tolgo con gli altri browser non cambia nulla, con IE degenera
ulteriormente
Mmmm, strano...

Quote:
prova a definire lo style come hai fatto prima:
span.style.float = 'left';

proverò anche questo :-)
era solo per uniformitÃ*, non sperare che cambi qualcosa

Quote:
come del resto fai sotto

questo è il solito problema devi dichiarare gli eventi con delle funzioni
anonime:
span.onmouseover = function(){viewLegend(this)};

dici che sia meglio?
no dico che potrebbe essere l'unico modo

Quote:
Ma perché devo mettere una funzione per chiamarne
a sua volta un'altra?
perche' ci hai messo un parametro, pero' dal momento che detto parametro è
this, allora in effetti puoi anche fare così:
span.onmouseover = viewLegend;

pero' devi cambiare la definizione di viewLegend() mettendo this al posto
del riferimento che passavi per paramentro in precedenza...

Quote:
ah, io cambierei nome a quella variabile 'span', io eviterei sempre nomi
"riservati al HTML" e poi è traviente perche in realtÃ* si tratta di un div

...perché era uno span inizialmente :-)
sì lo immaginavo...

Quote:
poi ho capito che con lo span
non si può fare e sono passato al div + float.
per curiositÃ*, span + float non ti funzionava? io l'ho usato in passato...

Quote:
Grazie, ciao
Prego


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.