Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    Passaggio corretto di un parametro ad una funzione tramite HTML

    Ciao.
    Sono sicuro che mi sto perdendo in qualcosa di banale ma che non riesco a trovare soluzione. Devo passare una variabile ad una funzione tramite form html:

    codice HTML:
     return "Inviato a <font color=\""+colore+"\">"+destinatario+"</font>: "+valore.substring(0,149) + "...<span style=\"cursor:pointer;\" onclick=\"creaElemento(\'"+valore.substring(0,valore.length-1)+"\')\"><b><i>Leggi tutta</i></b></span>";
    Credo che sia formattato correttamente, valore presenta apici che credo possano darmi problemi ed ho provato una replace con l'unicode e con \' ma non sono riuscito a farlo andare.
    L'errore è :uncaught syntaxerror: missing ) after argument list.

    In cosa mi sto perdendo?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,905
    Ciao, prima cosa, in questo specifico caso, per quella stringa, l'escape degli apici singoli è superfluo (anche se dovrebbe funzionare ugualmente in entrambi i casi); puoi togliere i backslash in questo punto (quelli in rosso):
    codice:
    onclick=\"creaElemento(\'"+valore.substring(0,valore.length-1)+"\')\">
    A parte questo, la causa del problema è presumibilmente quella che hai detto tu stesso: se la variabile valore presenta degli apici (in questo caso, sia singoli sia doppi) il codice risulterà corrotto.

    Se gli apici sono singoli l'errore sarà a livello di JavaScript (esattamente quello che hai riscontrato); se invece sono doppi, l'errore sarà a livello di HTML perché si romperà il valore definito come stringa dell'attributo onclick (e a quel punto il problema si ripercuoterà anche a livello di JavaScript).

    Il replace che hai effettuato non funziona perché la stringa HTML restituita dalla tua funzione risulterà già interpretata da JavaScript quando viene applicata come codice HTML.

    Per risolvere...

    Nel caso di apice singolo (apostrofo) puoi eseguire un escape con doppio backslash. Il primo backslash serve ad effettuare l'escape del secondo; così facendo, quando viene risolto il codice HTML, resterà un backslash che a sua volta servirà per effettuare l'escape del singolo apice a livello di JavaScript.

    Nel caso di doppio apice, invece, non può essere applicato questo metodo perché il parser HTML non interpreta gli escape ma sarà sufficiente sostituire tale carattere con la sua corrispondente entità HTML.

    Potresti quindi risolvere applicando, alla variabile, degli specifici replace per ciascuno dei due casi, in un modo del genere:

    codice:
    valore.substring(0,valore.length-1).replace(/'/g,"\\'").replace(/"/g,'&quot;')
    Prova e fai sapere
    Ultima modifica di KillerWorm; 26-03-2021 a 21:51
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Ciao KillerWorm.
    Sei stato chiarissimo nella spiegazione e ti confermo che è la soluzione giusta.
    Avevo intuito di dover effettuare qualche Replace e ne ho provate un paio ma non sono riuscito in alcun modo a risolvere. La tua ovviamente, con tanto di spiegazione chiarissima, è quella giusta e mi hai risolto un problema che saprò risolvere anche in futuro

    Grazie mille

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,905
    Bene, figurati, buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

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 © 2021 vBulletin Solutions, Inc. All rights reserved.