Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Composizione di value

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    583

    Composizione di value

    Ciao a tutti,

    il mio problema è il seguente:

    function CaricaCampi(form){

    var NumeroNews

    NumeroNews= form.ID_news.value;
    //alert(NumeroNews)
    alert(form."oggetto"+NumeroNews.value);

    form.oggetto.value = form."oggetto"+NumeroNews.value;

    }

    Non riesce a recuperarmi il valore dell'oggetto "oggetto"+NumeroNews.
    Se sostituisco con

    form.oggetto.value = form.oggetto5.value;

    o qualsiasi altro numero funziona e il NumeroNews lo recupera correttamente, quindi il problema probabilmente è nella composizione dell'oggetto.

    Grazie

  2. #2
    form."oggetto" + NumeroNews.value;

    L'errore probabilmente è questo. Quando "discendi" la gerarchia degli oggetti del documento, devi fare riferimento sempre a oggetti (Object) fino a che non arrivi a una loro proprietà o a un loro metodo.

    Nel codice qui sopra invece, passi per un oggetto form (che converrebbe identificare sempre con document.form) e poi tenti di "concatenare" un oggetto formato da una stringa ("oggetto") a cui fai seguire un numero. JavaScript non riesce a determinare correttamente la "catena" di oggetti in questo modo. Devi prima "valutare" l'oggetto complessivo e poi leggerne la proprietà value, in questo modo:

    codice:
    var campo = eval("document.form.oggetto" + NumeroNews);
    campo.value;
    Così facendo, imposti una variabile campo che è un oggetto di tipo Object. Il metodo eval() serve a "valutare" un'espressione ed è utile nel tuo caso. Infatti, esso riceve come argomento un'espressione composta da una stringa ("document.form.oggetto") e da una variabile (NumeroNews).
    eval() esegue prima l'espressione (concatenando la stringa e la variabile e poi la valuta. Un'espressione del genere (sapendo che NumeroNews è un numero) genera una cosa come:

    document.form.oggetto5

    che una volta valutata da eval() viene riconosciuta come un oggetto (l'oggetto "oggetto5" contenuto nel form). Per finire, da questo oggetto leggi la proprietà value con campo.value. Non puoi far leggere value all'interno di eval(), perché quel metodo a te serve per "creare" un oggetto partendo da una concatenazione di una stringa e un numero. Solo successivamente puoi accedere alle proprietà e ai metodi dell'oggetto così determinato.

    Una cosa...se puoi, evita di chiamare il form "form". Form è un oggetto JavaScript e non dovresti usare questa parola come nome di un oggetto. Chiamalo "modulo" al limite...

    Esiste anche un'alternativa più semplice, che non ti costringe a "passare" per l'oggetto form e a usare il metodo eval(). Basta che tu assegni ai campi del tuo form un attributo id invece di un attributo name. Quindi puoi accedere ad un campo del form in questo modo (oltretutto, usando il DOM standard W3C):

    codice:
    document.getElementById("oggetto" + NumeroNews).value
    Il metodo getElementById() accetta come parametro sia l'id "puro" di un oggetto che l'id di un oggetto determinato da una concatenazione (in pratica, sostituisce quello che prima facevi con eval()). Come vedi dal codice qui sopra, non sono passato attraverso l'oggetto form per accedere al campo che mi interessa, ho richiamato l'id del campo tramite la concatenazione di una stringa e una variabile numerica e ho letto immediatamente la sua proprietà value.
    Chiaramente, i tuoi campi dovranno avere degli id come: oggetto1, oggetto2, ecc.

    Spero di essere stato chiaro nella spiegazione.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    583
    Più chiaro di così mi sembra impossibile......

    Grazie mille!!

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.