Newsgroup: it.comp.lang.javascript
Titolo: ImageInput per XMLHttpRequest e Ismap ...

Ciao a tutti,
se io avessi un imageInput in un form ma se volessi fare una richiesta
sincrona con XMLHttpRequest, come faccio a ricavare le (x, y) del click (in
maniera cross-browser)?
E, analogamente, se avessi un immagine ismap, come faccio ad evitare la
propagazione del evento onclick e estrarre le (x, y)?
mi sembra che si possa giocare con "offsetParent" e "offsetTop"
"offsetLeft" pero' IE si comporta male nel caso di bordi e di centrature
tra i vari livelli contenitori,...
oppure: event.offsetX .layerX .pageX .clientX 
pero' qui accade che ci siano differenze di pochi pixel...
come si puo' fare?
avete mai avuto quest'esigenza?

 maniera cross-browser)?
NOn ho capito cosa centra xmlhttp, comunque sia vedi se questa (e la
corrispondente faq 10) può esserti d'aiuto:
 
http://www.criosoftware.it/default11.aspx
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

  
http://www.criosoftware.it/default11.aspx
si in teoria potrebbe andare bene, pero' ci sono dei problemi con IE...

 si in teoria potrebbe andare bene, pero' ci sono dei problemi con IE...
problemi con IE? di che tipo? l'esempio che il sito fa scaricare ti dà
problemi?
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 problemi?
Allora:
la funzione ScriviPosizione() in effetti per IE non utilizza l'altra
GetPosizioneOggetto( ) perche' si serve direttamente event.offsetXY
il problema lo darebbe GetPosizioneOggetto() se lo utilizzassi con IE
perche' come dicevo non tiene conto dei margini e degli allineamenti...

 l'esempio che il sito fa scaricare ti dà problemi?
GetPosizioneOggetto() non considera lo spessore dell'evventuale bordo del
contenitore:
ad es.:
<div id="box" style="border:100px solid #000">
<img width="100" height="100" border="1" alt="cippo"
onclick="alert(GetPosizioneOggetto(this,true))" />
</div>
restiuirebbe 0 (o il numero di pixel del margine del body)
e non rieesco a correggere nemmeno con getComputedStyle() per trovare i
vari bordi...
per quanto riguarda i corrispondenti di offsetX/offsetY per i browser != IE
ci dovrebbero essere layerX/Y
quindi ScriviPosizione() potrebbe diventare qualcosa del tipo:
function relative_position( evt )
{
	this.x = evt.layerX || evt.offsetX || evt.x || 0;
	this.y = evt.layerY || evt.offsetY || evt.y || 0;
	return this;
}

 </div>
Il problema lo risolvi se utilizzi direttamente l'oggetto event per
recuperare le coordinate, no?
Se con offsetX/layerX ci sono differenze di pochi pixel basta che tu
aggiusti il tiro, non vedo dove sta il problema.
Mi pare di ricordare che IE parte a considerare le coordinate da 0 con
offsetX/Y e Gecko da 1 con layerX/Y.. Non mi sembra un dramma.
Evita magari di impostare bordi all'elemento in questione, e di farlo - nel
caso - al suo contenitore; così ti eviti qualche calcolo in più.
Il tutto a memoria detto a memoria,eh, è un po' che non faccio di queste
cose.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)