Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336

    inserire testo in textarea

    Ciao a tutti!
    Avrei bisogno di rilevare la posizione del cursore in una textarea per poter inserire del testo dove è posizionato il cursore: ho cercato per un po' su questo forum trovando tantissimi threads... subito mi sono un po' depressa perchè tutte le risposte che vedevo erano del tipo "per IE c'è caretpos, in Javascript standard impossible!".
    Poi ho trovato questo: http://forum.html.it/forum/showthrea...izione+cursore.
    Provando con IE 6 e Firefox 1.5 sembra funzionare senza problemi.... però non mi è ben chiaro il funzionamento:
    codice:
    function addSml(sml) {
    	var obj=document.mioform.msg;
    	if (document.all) {
    		obj.focus();
    	  	var sel=document.selection;
    	  	var rng=sel.createRange();
    	  	rng.colapse;
    	  	rng.text=sml;
    	} else if(obj.selectionEnd){
    		var lng=obj.textLength;
    		var from=obj.selectionStart;
    		var to=obj.selectionEnd;
    		obj.value=obj.value.substring(0,from)+sml+obj.value.substring(to,lng)
    	} else obj.value+=sml;
    	obj.focus();
    }
    Ho notato ad esempio che con del testo scritto e il cursore in fondo alla textarea, IE passa il primo test mentre FF segue un altro ramo ma non so perchè.... :master: qualcuno mi può spiegare il significato delle espressioni evidenziate?
    Altra domanda probabilmente correlata alla prima: "totalmente crossbrowser e' impossibile"... questa funzione che problemi di compatibilità ha?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    if (document.all)

    controlla una proprietà del document del browser in uso che Firefox non ha, mentre è presente in IE: per quello FF salta il ramo dell'if ed esegue il codice nell'else.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    la funzione in se' non dovrebbe presentare grossi problemi di compatibilita'
    - le istruzioni IE proprietarie vengono eseguite se e' il DOM e' quello di IE (e di opera, che a quanto pare lo imita bene nel frangente)
    - se esiste quella proprieta' selectionEnd esistono anche le altre, quindi ci si trova su un mozilla o simile
    - tutti gli altri accoderanno a fine contenuto

    il "totalmente crossbrowser e' impossibile" si riferisce a scrivere dove si trova il cursore

  4. #4
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Grazie a entrambi per la risposta!
    Ancora un chiarimento: l'ultimo ramo serve per aggiungere in coda alla textarea, il penultimo invece estrae lunghezza del valore corrente della textarea, indice di inizio e di fine della parte selezionata e poi ricostruisce il nuovo valore della textarea mettendo insieme le varie sottostringhe (giusto?)... ma il primo? Cosa fanno le istruzioni proprietarie IE utilizzate?

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    var rng=document.selection.createRange();
    assegna a rng il contenuto della selezione,
    che
    rng.text=sml;
    sovrascrive con il nuovo contenuto

    chiaramente se la selezione fosse vuota aggiungerebbe dove si trova il cursore

    colapse dovrebbe permettere l' inserimento prima della selezione, dal momento che si sovrascrive il contenuto e' ininfluente

    tornando alla compatibilita' potrebbero esserci problemi con IE con Mac o con vecchie versioni di opera, ma non posso testare

    ciao

  6. #6
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Perfetto!
    Grazie mille!

  7. #7
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Uhmmm... dopo averlo capito, modificato e inserito nella mia pagina, mi sono accorta di un comportamento di questo script che non mi è molto chiaro.. posso approfittare ancora un attimo della vostra pazienza?
    Ho notato questo: se posiziono il cursore all'inizio della textarea, quando c'è del testo già scritto, senza selezionare nulla, con FF non entra nel ramo if(obj.selectionEnd) ma finisce nell'else finale che accoda il nuovo testo in fondo... come mai? Ho verificato che invece in tutti gli altri casi (cursore posizionato dopo il primo carattere o in qualunque altra posizione, testo selezionato dall'inizio o in una posizione arbitraria) funziona alla grande e quindi non riesco a spiegarmi questa differenza... :master:

  8. #8
    Utente bannato L'avatar di Braco
    Registrato dal
    Oct 2005
    Messaggi
    1,697
    Originariamente inviato da dannie
    Perfetto!
    Grazie mille!
    Ho scaricato il tuo codice, per te è perfetto, a me da errore "sml non è definito" come mai?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.