Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    138

    Lanciare funzione da evento onchage

    Buongiorno di nuovo a tutti.

    Ho un form contenente una casella di testo. Tale casella è sempre disabilitata (perché l'utente non deve modificarla) ma viene aggiornata continuamente a seguito di calcoli particolari.
    Ho provato a lanciare una funzione sull'onchange della casella di testo ma, ovviamente, non viene considerata, perché la casella è disabilitata (abilitandola l'evento onchange viene eseguito).
    Ecco il mio quesito. Esiste una qualche procedura per far sì che la funzione venga eseguita quando il contenuto della casella di testo cambia?

    Certo, potrei farlo dalle funzioni che aggiornano la casella di testo ma, essendo già queste parecchio lunghe, preferirei far eseguire la funzione dall'onchange della casella di testo.

    Grazie a tutti...di nuovo.

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, non credo cambi molto farlo a se o dalla tua funzione che già usi.
    Se devi comunque richiamare la stessa funzione separata o meno.
    Hai provato con readonly piuttosto che disabled?

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, credo che il punto del discorso stia nel fatto che l'evento onchange si verifica solo se la variazione del value viene effettuata da parte dell'utente ma non programmaticamente.

    Che il campo input sia, o no, disabled o readonly o qualsiasi altra cosa, la situazione non cambia se la tua intenzione è quella di controllare quando il value viene modificato via script.

    Attualmente non esiste nessun evento nativo del DOM che faccia al caso.

    In genere si può risolvere con l'uso di un setInterval, col quale vai a controllare se il value di tale elemento sia cambiato, ma personalmente, in questo caso, opterei per la soluzione che invece hai scartato.

    Puoi crearti una semplice funzione, in cui farai i tuoi controlli su tale input, quindi richiamarla là dove viene aggiornato il value dell'input.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Una volta che avevo un problema simile ho risolto impostando il campo come readonly ed a ogni cambiamento del value gli forzavo il focus così da far scattare il relativo evento che eseguiva la funzione
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Io ho lo stesso problema ho provato con readoly e senza vincoli ma con l'aggiornamento da JS non funziona ho provato anche a mettergli il fucus solo prima, solo dopo , prima e dopo ma non mi sta cambiando niente, se eseguo una modifica da tastiera mi cambia funziona tutto.

    Sto pensando una cosa strana è possibile passare il richiamo di una funzione come parametro di un'altra funzione ad esempio

    scrivi(param1,param2,'leggi()');
    dove:

    function scrivi(param1,param2,fun_leggi){
    document.form.testo1.value=param1;
    esegui(fun_leggi);
    }


    scrivi(param1,param2);leggi() // così non mi funziona
    Ultima modifica di napuleone; 03-11-2015 a 19:58 Motivo: idea nuova

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non mi risulta ci siano alternative al semplice:

    document.nomeform.nomecampo.value="valore"; tuafunzione();

    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    per quanto mi riguarda il problema sta nel fatto che tuafunzione() è una stringa passata come variabile come se la creassi con
    var tua="tuafunzione()";
    c'è un qualcosa che mi faccia eseguire tua

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Non ho capito bene cosa devi ottenere e perché vuoi passare la funzione come stringa.
    Comunque sia puoi risolvere in due modi.

    1 - Passare la funzione come semplice riferimento, così come solitamente si usa fare per le funzioni di callback:
    codice:
    scrivi(param1, param2, leggi);
    
    function scrivi(param1, param2, fun_leggi){
      document.form.testo1.value = param1;
      fun_leggi();
    }
    2 - Se proprio devi passarla come stringa, usare eval():
    codice:
    scrivi(param1, param2, 'leggi()');
    
    function scrivi(param1, param2, fun_leggi){
      document.form.testo1.value = param1;
      eval(fun_leggi);
    }
    ...ma quello che principalmente non riesco ad afferrare è: "cosa c'entra tutto questo col soggetto di questa discussione?"




    PS: quando posti del codice sul forum è consigliato usare gli appositi tag di formattazione (vedi info utili sul regolamento di sezione).
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Avevo aperto una discussione apposita ma mi hanno consigliato di seguire questa discussione simile su onchange che non scatta quando il dato viene inserito/variato da JS, per quanto mi riguarda la funzione che mi invia il dato viene chiamata in contesti diversi quindi non è personalizzabile sulla pagina, riesco a farlo solo se poi posso lanciare un'altra funzione parametrizzata.
    Adesso vado a provare la tua soluzione

    Funziona la Numero 1 ma così non mi serve
    mi serve passarla con i suoi parametri, la funzione non restituisce un valore ma setta dei campi. non riesco ad uscirne

    F U N Z I O N A anche la seconda è stata una lotta Grazie KillefWorm


    Il motivo è che la funzione viene richiamata da pù parti e quindi deve avere comportamenti diversi e comune ad altre
    Ultima modifica di napuleone; 04-11-2015 a 18:22 Motivo: Variazione Risultato

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.