Newsgroup: it.comp.lang.javascript
Titolo: Script funzionante con IE, non funzionante con Firefox

Buongiorno a tutti,
volevo sottoporvi il codice che ho magistralmente scopiazzato e
opportunamente corretto qua e là e successivamente implementato
all'interno di un gestionale per aggiornamento di contenuti web.
La necessità era quella di avere sopra la textarea i classici tastini
che ti mettono i tag html automaticamente..
Come già anticipato, ho cercato dappertutto, ho fatto qualche test in
locale ed alla fine sono riuscito (modificando del codice trovato in
rete) a fare ciò che mi serviva... però solamente su Internet
Explorer.. Qualcuno mi sa scovare l'errore per il quale questo codice
non viene calcolato da Firefox (i tasti non producono alcun effetto)?
Grazie a tutti!!!
Ecco il codice:
<script type="text/javascript">
 function setCaretPos(input){
   if(input.createTextRange){
      input.CaretPos = document.selection.createRange().duplicate();
   }
 }
 function insertAtCaret (input,button) {
   if(document.all && input.CaretPos && input.createTextRange){
     if(button.value.match(/(\*)?(\w+\=\w+|\w)/i)){
      var BBcode = RegExp.$2, isActive = RegExp.$1;
       if(BBcode.match(/^L$/i)){
        var url = prompt('Please insert the URL of your
link.','http://');
         if(!input.CaretPos.text){
          var link = prompt('Please enter the text to display for the
link.','');
              if(link.length == 0) link = url;
         }    else link = input.CaretPos.text;
              input.CaretPos.text = '<A href='+url+'>'+link+'</A>';
              return;
       }
       if(BBcode.match(/^M$/i)){
         var mail = prompt('Please insert the mail address.','');
	mailt = input.CaretPos.text;
	input.CaretPos.text = '<a href=mailto:'+mail+'>'+mail+'</a>';
              return;
       }
	if(BBcode.match(/^F$/i)){
         var size = prompt('Please insert size of your text','3');
	sizet = input.CaretPos.text;
	input.CaretPos.text = '<font size='+size+'>'+sizet+'</font>';
              return;
       }
       if(BBcode.match(/^C$/i)){
         var col = prompt('Please insert the Color code of your
text.','');
	color = input.CaretPos.text;
	input.CaretPos.text = '<font color='+col+'>'+color+'</font>';
              return;
       }
       if(input.CaretPos.text.length == 0){
          if(isActive) BBcode = BBcode.replace(/\=\w+$/,'');
          input.CaretPos.text =
'<'+isActive.replace(/\*/g,'/')+BBcode+'>';
          button.value = (button.value ==
button.value.replace(/\*/g,''))
                       ? '*'+button.value.replace(/\*/g,'')
                       : button.value.replace(/\*/g,'');
       }
       else{ input.CaretPos.text = '<'+BBcode+'>'+ input.CaretPos.text
                                 +
'</'+BBcode.replace(/\=\w+$/,'')+'>';
       }
     }
   }
 }
//-->
</script>
<form>
<input type="button" value="B - Grassetto"
style="font-weight: bold"
onclick="insertAtCaret(this.form.news_text,this)">
<input type="button" value="I - Corsivo"
style="font-style: italic"
onclick="insertAtCaret(this.form.news_text,this)">
<input type="button" value="U - Sottolineato"
style="text-decoration:underline"
onclick="insertAtCaret(this.form.news_text,this)">
<input type="button" value="Colore"
onclick="insertAtCaret(this.form.news_text,this)"
oncontextmenu="var color=prompt('What Color?','');
if(color && color.length>0){
this.style.color=color;
insertAtCaret(this.form.news_text,this)}
return false">
<input type="button" value="Font Size"
onclick="insertAtCaret(this.form.news_text,this)";>
<input type="button" value="LINK"
onclick="insertAtCaret(this.form.news_text,this)">
<input type="button" value="MAIL"
onclick="insertAtCaret(this.form.news_text,this)">
 <br>
<textarea name="news_text" rows="15" cols="70";
              onselect="setCaretPos(this);"
              onclick="setCaretPos(this);"
              onkeyup="setCaretPos(this);" >prova</textarea> 
</form>

Ops,
ho dimenticato di ammettere la solita ignoranza in materia che mi
contraddistingue :-P
...purtroppo però mi tirano in mezzo e mi tocca sclerare (e rompere a
voi, se qualche anima pìa mi assiste!!!)....

    if(document.all && input.CaretPos && input.createTextRange){
document.all esiste solo in Explorer (e nei browsers che si identificano
come Explorer), quindi questa condizione restituisce false in FireFox (e
tutti gli altri browsers che non hanno document.all) e di conseguenza non
viene eseguito alcun codice; mi pare, tra l'altro, che il metodo
createTextRange sia proprietario di Explorer (ovverosia, funziona solo lě,
gli altri browsers non lo "conoscono").
-- 
Nando [?]
Apostolo della Prova

 viene eseguito alcun codice;
Mea culpa! Era scritto ovunque a caratteri cubitali!! E' troppo se
provo a chiedervi come modificare il codice poco sopra? Ci ho provato
ma non vi dico cos'ho combinato.....

 ha scritto:

Guarda, non sono espertissimo ed è una cosa che non ho mai fatto. Leggi un
po' qui:
http://www.sitepoint.com/article/life-autocomplete-textboxes/2
e vedi di estrapolare ciò che ti serve. Di più non so dirti :)
