Blocco inserimento valori con script attiva/disattiva oggetti form

pierhagi

Nuovo Utente
18 Feb 2013
5
0
1
Ciao

ho un modulo inserimento dati in db, fatto in asp classico, che funziona correttamente.
A questo modulo ho aggiunto uno script attiva/disattiva oggetti form, che disattiva di default oggetti come textbox o select option. Per utilizzare questi oggetti bisogna cliccare sulla input radio corrispondente x attivare l'oggetto interessato e utilizzarlo, as es.:

se devo inviare un valore da una select, clicco sulla "sua" input radio x abilitare la select, seleziono il valore dalla select e clicco sul tasto invia x inviare il valore.

Ora avendo inserito questo script nella mia pagina asp non riesce a recuperare il valore e passarglielo alla variabile.

Questa è la mia select:
Codice:
<input id="radio" name="dOption" value="id_contenuti" onClick="chMd()" type="radio">
<select name="id_contenuti" id="id_contenuti" class="select-triplo-dx" onChange="check_valore('id_contenuti', 'id_contenuti');" disabled="disabled">

Questo è lo script:

Codice:
<script>
//INIZIO FUNZIONE ABILITA/DISABILITA OGGETTI FORM
 function chMd()
 {	 
  // initialize form with empty field
  document.forms[0].link_esterno.disabled=false;
  document.forms[0].link_esterno.value="";

  for(var i=0;i<document.forms[0].elements.length;i++)
  {
    if(document.forms[0].elements[i].name=="dOption")
    {//	No Constraints: Nessun vincolo
     if(document.forms[0].elements[i].value=="A")
     {
       if(document.forms[0].elements[i].checked==true){

        document.forms[0].link_esterno.disabled=true;

		document.forms[0].id_contenuti.disabled=true;
		document.forms[0].id_super_categoria.disabled=true;
		document.forms[0].id_categoria.disabled=true;
		document.forms[0].id_sotto_categoria.disabled=true;

       }
     }
     else if(document.forms[0].elements[i].value=="B")
     {//Textbox: link_esterno
       if(document.forms[0].elements[i].checked==true){
        document.forms[0].link_esterno.disabled=false;

	    document.forms[0].id_contenuti.disabled=true;
	    document.forms[0].id_super_categoria.disabled=true;
	    document.forms[0].id_categoria.disabled=true;
	    document.forms[0].id_sotto_categoria.disabled=true;

       }
     }
     else if(document.forms[0].elements[i].value=="id_contenuti")
     {//Select: id_contenuti
       if(document.forms[0].elements[i].checked==true){
        document.forms[0].link_esterno.disabled=true;

		document.forms[0].id_contenuti.disabled=false;
		document.forms[0].id_super_categoria.disabled=true;
		document.forms[0].id_categoria.disabled=true;
		document.forms[0].id_sotto_categoria.disabled=true;

       }
     } 
	 
    }
  }
 }
//FINE FUNZIONE ABILITA/DISABILITA OGGETTI FORM
</script>

L'errore che ottengo è questo:

Codice:
Microsoft VBScript runtime error '800a0009'

Subscript out of range: '[number: 0]'

l'errore indica che non riesco a passare i valori che recupero dalla select, in tutto recupero dalla select 6 valori, per poi passarli alla mia funzione split.

...cmq il tutto funziona perfettamente senza la funzione attiva/disattiva oggetti form....quindi non passa una variabile...credo!

Potete aiutarmi?

Pier
 
Ciao, ho provato a simulare il tuo form anche se non ho capito bene come è strutturato
i value delle option li passa correttamente, forse il tuo problema è nella funzione check_valore() che non hai postato
ho fatto questa prova
HTML:
<form>
    <input type="button" name="id_categoria" value="id categoria"/>
    <input type="button" name="id_sotto_categoria" value="id sotto categoria"/>
    <input type="button" name="id_super_categoria" value="super categoria"/>
    <input type="text" name="link_esterno" value=""/>
    <input id="radio" name="dOption" value="id_contenuti" onClick="chMd()" type="radio">
    <select name="id_contenuti" id="id_contenuti" class="select-triplo-dx" onChange="check_valore('id_contenuti', 'id_contenuti');" disabled="disabled">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
</form>
<script>
    function check_valore(x,y) {
        var select = document.getElementById(x);
        var valore = select.options[select.selectedIndex].value
        alert(valore);
    }
    //INIZIO FUNZIONE ABILITA/DISABILITA OGGETTI FORM
    function chMd()
    {	 
        // initialize form with empty field
        document.forms[0].link_esterno.disabled=false;
        document.forms[0].link_esterno.value="";

        for(var i=0;i<document.forms[0].elements.length;i++)
        {
            if(document.forms[0].elements[i].name=="dOption")
            {//	No Constraints: Nessun vincolo
                if(document.forms[0].elements[i].value=="A")
                {
                    if(document.forms[0].elements[i].checked==true){

                        document.forms[0].link_esterno.disabled=true;

                        document.forms[0].id_contenuti.disabled=true;
                        document.forms[0].id_super_categoria.disabled=true;
                        document.forms[0].id_categoria.disabled=true;
                        document.forms[0].id_sotto_categoria.disabled=true;

                    }
                }
                else if(document.forms[0].elements[i].value=="B")
                {//Textbox: link_esterno
                    if(document.forms[0].elements[i].checked==true){
                        document.forms[0].link_esterno.disabled=false;

                        document.forms[0].id_contenuti.disabled=true;
                        document.forms[0].id_super_categoria.disabled=true;
                        document.forms[0].id_categoria.disabled=true;
                        document.forms[0].id_sotto_categoria.disabled=true;

                    }
                }
                else if(document.forms[0].elements[i].value=="id_contenuti")
                {//Select: id_contenuti
                    if(document.forms[0].elements[i].checked==true){
                        document.forms[0].link_esterno.disabled=true;

                        document.forms[0].id_contenuti.disabled=false;
                        document.forms[0].id_super_categoria.disabled=true;
                        document.forms[0].id_categoria.disabled=true;
                        document.forms[0].id_sotto_categoria.disabled=true;

                    }
                } 
	 
            }
        }
    }
    //FINE FUNZIONE ABILITA/DISABILITA OGGETTI FORM
</script>
 
Ciao

scusa se ti rispondo solo ora!

Il codice che mi hai passato funziona! L'errore che facevo non c'entrava con javascript ma con asp... non avevo scritto correttamente un controllo "if" in asp.

Ti chiedo ancora una modifica che completerebbe il modulo. Nel codice javascript che ho postato, obbligo la compilazione, in un form, di una textbox o della select cliccando sulle rispettive radio button...se clicco su una x forza disattivo l'altra!

Ora, se erroneamente, l'utente, prima abilita la textbox e scrive il valore e poi ci ripensa, quindi abilita e seleziona il valore nella select, nella textbox rimane il valore scritto in precedenza e se prova ad inviare i dati, crea un errore.

Ti chiedo se puoi aiutarmi ad aggiungere il codice che cancellerebbe i valore sia dalla textbox o viceversa dalla select, al momento che si clicca sulla radio button. Ora ho modificato ulteriormente il form arrivando ad inserire 4 select e un campo testo. Mi servirebbe che, ogni qualvolta si clicchi su una qualsiasi radio button x abilitare uno dei 5 oggetti del form, le precedenti selezioni o inserimenti di questi oggetti fossero cancellati, visualizzando il form "lindo" con i "campi" puliti da ogni valore... come se fosse stata appena richiamata la pagina che visualizza il form!
 
nell'esempio che ti ho postato spuntando la check elimini l'eventuale contenuto dell input text con questa istruzione
Codice:
document.forms[0].link_esterno.value="";
ti basta pertanto inserirla ogni lvolta che hai bisogno di ripulire i campi
invece per reimpostare la option delle select puoi provare cosi
Codice:
document.forms[0].nome_select.selectedIndex = 0; // o il value che ha di default
 
Ciao

il tuo codice funziona!

L'ho inserito così nelle select:
Codice:
                else if(document.forms[0].elements[i].value=="id_contenuti")
                {//Select: id_contenuti
[COLOR="#FF0000"]document.forms[0].id_contenuti.selectedIndex = 0;[/COLOR] // o il value che ha di default.
													     //Pulisco la textbox in caso di selezione di una radio.
                    if(document.forms[0].elements[i].checked==true){
                        document.forms[0].link_esterno.disabled=true;
						document.forms[0].id_lingua.disabled=true;

                        document.forms[0].id_contenuti.disabled=false;
                        document.forms[0].id_super_categoria.disabled=true;
                        document.forms[0].id_categoria.disabled=true;
                        document.forms[0].id_sotto_categoria.disabled=true;
                    }
                }

Invece in link_esterno ho usato il codice contemporaneamente sia x una textbox che select:

Codice:
                else if(document.forms[0].elements[i].value=="B")
                {//Textbox: link_esterno + Select: id_lingua
					[COLOR="#FF0000"]document.forms[0].link_esterno.value="";[/COLOR]//Pulisco la textbox in caso di selezione di una radio.
					[COLOR="#FF0000"]document.forms[0].id_lingua.selectedIndex = 0;[/COLOR] // o il value che ha di default.
																	  //Pulisco la textbox in caso di selezione di una radio.
                    if(document.forms[0].elements[i].checked==true){
                        document.forms[0].link_esterno.disabled=false;
						document.forms[0].id_lingua.disabled=false;
						
                        document.forms[0].id_contenuti.disabled=true;
                        document.forms[0].id_super_categoria.disabled=true;
                        document.forms[0].id_categoria.disabled=true;
                        document.forms[0].id_sotto_categoria.disabled=true;
                    }
                }


Sai x caso xchè in IE il menù delle select si apre solo x un istante senza dar la possibilità di selezionare il valore?
 
a me non lo fa, posta la select o un link per vedere
 

Discussioni simili