Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    Prendere il nome di un oggetto

    Ciao a tutti raga,
    vorrei premettere che non so quanto sia esplicativo il titolo e soprattutto che sono novello di javaScript .
    Il problema è che devo creare DINAMICAMENTE UNA TABELLA ed ogni riga ha un menu a tendina (semplice, con valore SI/NO) con associato un campo INPUT (testo) nell' altra colonna.
    Inizialmente, il menu a tendina ha valore NO, quindi il campo di testo è disabilitato.
    Il mio problema è che ogni riga che aggiungo (quindi per ogni menu a tendina/campo di testo) devo associare l' evento onChange che, utilizando una function, mi attiva/disattiva il campo di testo a seconda del valore SI o NO del menu (spero di essere stato chiaro ).

    Cioé:
    *appena creo la nuova riga con le due colonne, di default ho il menu a NO e il campo di testo DISABILITATO
    *Se il menu a tendina va a SI, il campo di testo viene ABILITATO
    *Se il menu a tendina ritorna a NO, il campo di testo viene DISABILITATO
    *Se riporto il menu su SI, il campo mi si riattiva e cosi via...

    Il mio problema è che non so come prendere il nome di un oggetto da funzione. Vi posto il codice e l'errore per farvi capire meglio.

    codice:
    ...
    // i è il contatore delle righe della tabella che uso per dare nomi univoci
    var numeroTelefono = document.createElement("INPUT");
    numeroTelefono.setAttribute("name","telefono_"+i); 
    numeroTelefono.setAttribute("size",13); 
    numeroTelefono.setAttribute("maxLength",10); 
    numeroTelefono.setAttribute("disabled", true);
    numeroTelefono.style.background = '#CCCCCC'; 
    
    var SimABordo = document.createElement("SELECT");
    var temp = "sim_a_bordo_"+i;
    SimABordo.setAttribute("name", temp);
    temp = "id_select_"+i;
    SimABordo.setAttribute("id", temp); 
    
    // inserisco le OPTION in SimABordo
    SimABordo.options[0] = new Option('No', 'no');
    SimABordo.options[1] = new Option('Si', 'si');
    
    // associo all' onchange della SELECT la funzione setInput()
    SimABordo.onchange = function () { setInput(numeroTelefono, this.value); };
    // dove this.value mi tiene traccia del SI/NO del menu. L' ho testato e funziona correttamente.
    // Il problema penso sia numeroTelefono
    
    ...
    
    // la funzione setInput è (che nel codice ho dichiatato prima della roba sopra):
    function setInput(nomeCampoTelefono, value){
        if(value == "si"){
    	document.frm_list.nomeCampoTelefono.name.disabled=false;
    	document.frm_list.nomeCampoTelefono.name.style.background="#FFFFFF";
    	document.frm_list.nomeCampoTelefono.name.style.color="#000000";
        } else {
    	document.frm_list.nomeCampoTelefono.name.disabled=true;
    	document.frm_list.nomeCampoTelefono.name.style.background="#CCCCCC";
    	document.frm_list.nomeCampoTelefono.name.style.color="#000000";
    	document.frm_list.nomeCampoTelefono.name.value="";
        }
    } // end setInput
    Le righe e colonne, sono create senza problemi, quando però cambio il valore del menu a tendina ricevo il seguente errore:
    codice:
       'document.frm_list.nomeCampoTelefono.name' è nullo o non è un oggetto
    La domanda quindi è: come passo l'oggetto alla funzione? Ho provato anche con le () ma niente:
    codice:
       document.frm_list.(nomeCampoTelefono.name).disabled=false;
    Come sempre un grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    document.frm_list.elements[nomeCampoTelefono.name].disabled=false;

  3. #3
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Grazie per la risposta. Purtroppo però continuo a ricevere errore...

    codice:
        'document.frm_list.elements[...]' è nullo o non è un oggetto
    Non so se può aiutarti: mi dice Codice: 0

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    senza complicarti troppo la vita, dal momento che hai un nome che contiene "i" da cui risalire al campo telefono_i, puoi fare cosi'
    codice:
    SimABordo.onchange = function () { setInput(this); };
    
    ...
    
    function setInput(sel){
    
    var
    	el,
    	f=document.frm_list,
    	val=sel.options[sel.selectedIndex].value,
    	elName='telefono_'+sel.name.substring(sel.name.lastIndexOf('_')+1);
    
    for(var k=0;k<f.elements.length;k++){
    	if(f.elements[k].name == elName) el=f.elements[k];
    }
        if(val == "si"){
    	el.disabled=false;
    	el.style.background='#fff';
    	el.style.color='#000';
        } else {
    	el.disabled=true;
    	el.style.background='#ccc';
    	el.style.color='#000';
    	el.value="";
        }
    }
    nota: da quello che sinceramente mi sembra essere un bug di IE al momento non mi viene in mente altro che ciclare, senza dubbio non una soluzione elegante, ma e' la prima che mi e' venuta in mente dal momento che non riesco in altro modo a far riferimento ad elementi creati ed appesi al form (elements['nome'], eval, ... ).
    Qualora ci fossero sviluppi prego postare in questa discussione

    ciao

  5. #5
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Purtroppo ora non ho il PC e non posso testarlo. Comunque ieri ho provato questa strada e sembra che funzioni (devo fare qualche altro test per essere sicuro ):
    1- ho aggiunto un ID a numeroTelefono;
    2- ho usato elements come mi avevi detto però con l'ID invece del "name".

    codice:
    ...
    // nuovo attributo di numeroTelefono
    numeroTelefono.setAttribute("id","id_telefono_"+i);
    ...
    
    // quindi in setInput() ho
    function setInput(...) {
    ...
    //ho nomeCampoTelefono.id invece di nomeCampoTelefono.name
    document.frm_list.elements[nomeCampoTelefono.id].disabled=false;
    ...
    }
    Grazie di nuovo

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.