Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* [JS] Impostare un elemento nella pagina
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 21 Lug 2009 20:12    Oggetto: * [JS] Impostare un elemento nella pagina Rispondi citando

Salve.

Non so che già ho scritto una discussione di questo genere, cmq volevo sapere che con javascript e possibile fare queste cose:

1. Creare un'insieme di elementi <li> per un menù e inserirli all'interno del body.

2. Permettere ad un sotto-menù di aprirsi con un effetto.

3. Eliminare elementi dalla pagina.

E' possibile fare ciò?
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 21 Lug 2009 22:31    Oggetto: Rispondi citando

La risposta è sì a tutte e 3 le domande.
Puoi usare javascript terra terra ma è meglio passare attraverso un framework tipo jquery, extjs, mojo etc... perchè permettono di scrivere codice molto più velocemente soprattutto quando devi lavora con insiemi massicci di nodi sul dom.
Ora son di volata, magari domani ti posto qualche cosa.

Qui introduco extjs e faccio qualche esempio su come interagire con il dom passando anche dalle query xpath.
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 22 Lug 2009 19:54    Oggetto: Rispondi citando

ok, anchio ora non ho tempo, aspetto il tuo prossimo post
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 23 Lug 2009 11:41    Oggetto: Rispondi citando

Ciao,
velocemente ti posto un esempio di come usare extjs per aggiungere a runtime un elemento <li> ad un <ul>.
Prima il codice della paginetta di prova:
Codice:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<!-- extjs -->
<script type="text/javascript" src="../lib/ext-2.2/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../lib/ext-2.2/ext-all.js"></script>
<script type="text/javascript">
   Ext.onReady
   (
      function()
      {
         Ext.get('cmd').on('click',function()
         {
            Ext.DomHelper.append('list',
            {
               tag: 'li'
               ,cls: 'voce'
               ,html: 'Nuovo li'
            });
         });
      }
      ,window
   );
</script>
</head>
<body>
   <p>Qui sotto verr&agrave; composta la lista</p>
   <div style="width:200px;height:300px; border-style: solid; border-width: 1px; border-color: #000000">
      <ul id="list">
      </ul>
   </div>
   <br/><input type="button" id="cmd" value="Aggiungi li"/>
</body>
</html>

Nel link che ti avevo postato prima c'è lo spiegone del funzionamento che riassumo qui.
Noi dobbiamo operare quando il documento ha finito di caricarsi per evitare di provare ad accedere a dei nodi che non esistono ancora.
il codice:
Codice:

Ext.onReady(function()
{
...
},window);

in pratica significa: "quando il documento si è caricato esegui questa funzione (quella dichiarata inline) nello scope dell'oggetto window.

Tramite Ext.get(id) preleviamo il nodo con id "id". Nel nostro caso vogliamo associare al click del bottone un handler quindi:
Codice:

...
Ext.get('cmd').on('click',function()
...
{});

significa: "prendi l'elemento con id "cmd" (il nostro bottone) e all'evento click esegui questa funzione (quella inline).

Tramite l'oggetto Ext.DomHelper possiamo agire "a basso livello sul dom".
Per aggiungere un figlio ad un elemento possiamo usare il metodo append che riceve come primo parametro il parent (nel nostro caso <ul>) e come secondo una stringa o un oggetto json che descrive il nuovo nodo.
Nel mio caso ho usato json.
Quindi:
Codice:

Ext.DomHelper.append('list',
{
   tag: 'li'
   ,cls: 'voce'
   ,html: 'Nuovo li'
});

sto dicendo: "aggiungi un nuovo figlio a "list" (elemento di id "list") e questo figlio è: un li, con classe "voce" e html (innerHTML) "Nuovo li".

Se esegui la paginetta vedrai che ad ogni click verrà aggiunta una voce.

Puoi anche provare a sostituire la funzione passata come parametro a Ext.onReady() con:
Codice:

Ext.get('cmd').on('click',function()
         {
         // questo elemento è la lista
            var list=Ext.get('list')

         // creo un nuovo Ext.Element così posso usare il framework senza problemi
            var el=new Ext.Element(document.createElement('li'));
            
            el.addClass('voce');
            
         // qui aggiorno di fatto l'innerHTML del nodo
            el.update('Nuovo li');

         // aggiungo la voce alla lista
            list.appendChild(el);
         });

Questa fa esattamente la stessa cosa solo che la creazione degli li avviene usando Ext.Element che è l'astrazione di extjs verso i nodi.
La chiamata el.update modifica con il parametro passato l'innerHTML dell'elemento el.

Ho aggiunto una classe "voce" ai vari li perchè nel caso si decidesse di agire in modo globale su questi li potremmo recuperare tutti gli li, agganciarli in un colpo solo uno o più handler per i vari eventi; insomma potremmo agire sull'insieme degli li invece che su un li alla volta.

Ti rimando al link dell'altro post per vedere dove recuperare la libreria extjs.
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 23 Lug 2009 13:20    Oggetto: Rispondi citando

Nel frattempo ho provato ha vedere se mi la pagine test.html che tu hai postato qui:
http://forum.zeusnews.com/viewtopic.php?t=41200

Io ho usato la ext JS-3.0.0 e ho modificato tutti i percorsi url con i percorsi che ho io, ho provato cosi:
Codice:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <link rel="stylesheet" type="text/css" href="/lib/ext-3.0.0/resources/css/ext-all.css" />   
      <title>Test!</title>
   <!-- core di extjs e js specifici -->
       <script type="text/javascript" src="/lib/ext-3.0.0/adapter/ext/ext-base.js"></script>
       <script type="text/javascript" src="/lib/ext-3.0.0/ext-all-debug.js"></script>
       
       <script type="text/javascript">
          Ext.onReady
          (
             function()
             {
                var win=new Ext.Window
                (
                   {
                      title: 'Test!',
                      border: true,
                      resizable: true,
                      closable: true,
                      shadow: false,
                      items:
                      [
                         {
                            'html': 'Questa &egrave; una finestra di prova!'
                         }
                      ]
                   }
                );
               
                win.show();
             },
      </script>       
   </head>
   <body>
     
   </body>
</html>


Ma nn funziona, come mai?
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 23 Lug 2009 14:01    Oggetto: Rispondi citando

Nella lezione davo per scontato che il tutto venisse fatto girare con un web server.
Devi usare i percorsi relativi oppure assoluti ma riferiti alla dir reale in cui hai messo il tutto.
Se la tua struttura del progetto è:
Codice:

progetto
--lib
----le cose di extjs
--test.html

dentro a test.html i percorso verso la libreria devono diventare:
Codice:

lib/ext-3.0.0/resources/css/ext-all.css
lib/ext-3.0.0/adapter/ext/ext-base.js
lib/ext-3.0.0/ext-all-debug.js
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 23 Lug 2009 14:15    Oggetto: Rispondi citando

Cambiando i percorsi non mi va lo stesso
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 23 Lug 2009 14:35    Oggetto: Rispondi citando

Di preciso che cosa succede?
Non vedi proprio nulla?

Se usi firefox non è che ti installi firebug così proviamo a debuggare?
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 23 Lug 2009 14:55    Oggetto: Rispondi citando

Ho installato firebug, nella scheda console mi da un errore di sintassi.

Si può vedere anche in che riga è l'errore?

EDIT:

Ho visto solo ora la riga, e nella riga 36, doce c'è il tag </script>
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 23 Lug 2009 18:11    Oggetto: Rispondi citando

Credo di aver trovato l'errore.
Dopo
Codice:

win.show();
},

manca
Codice:

window);

e in pratica dovresti ottenere una cosa come:
Codice:

Ext.onReady
(
   function()
   {
      var win=new Ext.Window
        (
           {
              title: 'Test!',
              border: true,
              resizable: true,
              closable: true,
              shadow: false,
              items:
              [
                 {
                    'html': 'Questa &egrave; una finestra di prova!'
                 }
              ]
           }
        );
       
        win.show();
   }
   , window
);

così dovrebbe andare
Top
Profilo Invia messaggio privato
sevenjeak
Semidio
Semidio


Registrato: 04/02/08 22:05
Messaggi: 308
Residenza: Roma

MessaggioInviato: 24 Lug 2009 10:26    Oggetto: Rispondi citando

Mi restituisce questo messaggio di errore:
Codice:

Ext.onReady is not a function
http://localhost/Script/test.html
Line 35
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 28 Lug 2009 21:50    Oggetto: Rispondi

Secondo me sono agganciati male i file della libreria.
Il pacchetto della versione 3.0 contiene varie cose e per l'uso base servono i seguenti files (ipotizzando che il tutto sia nella dir "ext")

  • ext/resources/css/ext-all.css
  • ext/adapter/ext/ext-base.js
  • ext/ext-all.js

inclusi nell'ordine che ti ho proposto.
Da quello che ho capito tu stai usando un webserver quindi occorre che il percorso abbia davanti la "/" per tutti e tre i files
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi