Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery onChange

    Ciao a tutti ragazzi, mi sono iscritto per cercare soluzione ad un problema che ho da qualche giorno, sono nuovo nello sviluppo web e magari può essere una stupidaggine..
    Ho una lista drop down con due valori insieme ad altri elementi in un form. Ciò che vorrei fare è attivare quattro componenti del form se l'utente seleziona il primo valore della lista e disattivarli altrimenti.

    Nell'applicazione web c'è una pagina principale, e l'utente naviga nel sito aprendo e chiudendo tab dinamicamente con chiamate ajax tramite la libreria JQuery, che rimuovono la pagina corrente e caricano la nuova pagina in un div specifico.
    In queste pagine caricate con Ajax ho bisogno di metterci i javascript che verranno utilizzati in quelle pagine, per esempio in questo caso il javascript che attiva/disattiva i componenti, ma non riesco a chiamarlo perchè mi esce l'errore "**Uncaught ReferenceError: soggettiNaturaChangeEvent is not defined**", dove soggettiNaturaChangeEvent è il nome della funzione javascript.

    Questo è il punto dove viene chiamata, nella pagina newEditSoggetti.jsp:

    codice:
    <form:select id="soggetti_soggettiNatura" path="soggettiNatura" cssStyle="width:300px;" onChange="javascript:soggettiNaturaChangeEvent();">
        ...
        ...
        ...
    In quella pagina c'è anche la funzione javascript:

    codice:
       <script id="function1" type="text/javascript">
            alert("soggettiNaturaChangeEvent");
            function soggettiNaturaChangeEvent()
            {
                alert("function soggettiNaturaChangeEvent");
                var natura = document.getElementById('soggetti_soggettiNatura'); 
                var datanascita = document.getElementById('soggetti_soggettiDataNascita');
                var luogonascita = document.getElementById('soggetti_soggettiLuogoNascita');
                var sesso1 = document.getElementById('soggettiSessoID1');
                var sesso2 = document.getElementById('soggettiSessoID2');
                if(natura.value == "Persona fisica")
                {
        		datanascita.disabled=false;
        		luogonascita.disabled=false;
        		sesso1.disabled=false;
        		sesso2.disabled=false;
        	}
        	else
        	{
        		datanascita.disabled=true;
        		luogonascita.disabled=true;
        		sesso1.disabled=true;
        		sesso2.disabled=true;
        	}
        }
        </script>
    Qui invece c'è la funzione di refresh dei tab in una libreria di funzioni javascript separata, che chiama uno script di inizializzazione specificato tra i parametri:

    codice:
    //reset variabili, riordina tabs, etc...
        $.ajax(action,
        {
        success : function(result)
        {
            //cerca il div dove mettere il contenuto da caricare
    	var doc = document.getElementById(newid);
    	doc.innerHTML = doc.innerHTML + result;
    
            //cerca lo script di inizializzazione "scriptId" e lo esegue (E QUESTO FUNZIONA)
    	scripts = $('#' + scriptId); 
    	eval(scripts.html());
    		
            //qui cerco di trovare tutti i tag <script> i cui id iniziano con "function" e applicare la funzione eval
            var jScripts = $("[id^=function]");
    	for(var i = 0; i < jScripts.size(); i++)
    	{
               eval(jScripts.html());
    	   jScripts = jScripts.next();
    	}
        }
        });
    La pagina stampa la prima alert quando (credo) appende la funzione al DOM, ma quando clicco sul componente che dovrebbe invocare la funzione javascript ottengo quell'errore.
    Ciò che vorrei è far partire questa funzione quando clicco sul componente soggettiNatura, non quando ajax finisce di caricare la pagina.

    Una piccola nota: se cerco di caricare la pagina normalmente (senza Ajax) la funzione non crea problemi..
    Ho una funzione nella pagina principale che mi mostra il codice html corrente dopo tutte le modifiche effettuate dai vari javascript e ajax (puramente per una questione di debug) e la funzione javascript che sto cercando di far eseguire è presente.

    Grazie a tutti quelli che cercheranno di aiutarmi!
    Andrea

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Premesso che sarebbe sempre meglio mettere gli script nella <head> della pagina madre, vedi se qui trovi aiuti/spunti.


    P.S. Ho notato che jsp s'interfaccia peggio con ajax rispetto a php/asp, non saprei dirti il motivo non conosco jsp. Speriamo non sia il tuo caso
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Grazie mille per il suggerimento, purtroppo non ho trovato nulla per risolvere il mio problema (per mia ignoranza, non per colpa tua), visto che gli esempi riportati sono in php e non posso applicarli qui su jsp (anche se la logica mi sembra tale e quale alla mia, tranne per il fatto che gli script non sono nell'head)..

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