Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161

    checkbox funzionante solamente al secondo "tentativo"

    Ho un probelma con un codice javascript associato a un checkbox

    Se inizialmente il checkbox non è selzionato nessun problema, funziona tutto a meraviglia, se invece ha l'attributo checked settato a checked:
    -la visualizzazione iniziale è corretta
    -quando deseleziono il checkbox i capi day[day], day[month] e day[year] vengono correttamente modificati, mentre time e type[] rimangono come se il checkbox fosse selezionato
    - se riseleziono la visualizzazione è esatta
    - se deseleziono nuovamente la visualizzazione è esatta

    Ecco il codice, spero che possiate aiutarmi!!
    codice:
    function NoScad(){
    
    	ElCheck=document.getElementById('senzaScad');
    	if(ElCheck.checked==true){
    		vDay="00";
    		vMonth="00";
    		vYear="0000";
    		incombente=1;
    		stato=true;
    		ora="00:00";
    		tipo="hidden";
    	}
    	else{
    		var data = new Date();
    		vDay=data.getDate();
    		if (vDay < 10) vDay = "0" + vDay;
    		vMonth=data.getMonth()+1;
    		if (vMonth < 10) vMonth = "0" + vMonth;
    		vYear=data.getFullYear();
    		incombente=0;
    		stato=false;
    		tipo="text";
    	}
    
    	arrCaselleInput = document.getElementsByTagName("input");
    	for (i = 0; i < arrCaselleInput.length; i++)
    	{
    		switch (arrCaselleInput[i].name) 
    		{  
    		    case "day[day]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vDay;
    			
    		      break;
    		    case "day[month]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vMonth;
    			
    		      break;
    			case "day[year]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vYear;
    			
    		      break;
    			case "time":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = ora;
    			
    		      break;
    		}
    	}
    	
    	// se selezionato senza scadenza automaticamente incombente
    	arrSelect = parent.document.getElementsByTagName("SELECT");
    	for (i = 0; i < arrSelect.length; i++)
    	{
    		switch (arrSelect[i].name) 
    		{  
    		    case "type[]":
    				arrSelect[i].disabled = stato;
    				arrSelect[i].value = incombente;
    				
    		    break;
    
    		}
    	}
    	
    }

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Posta il link alla pagina pubblica cosi da testare e vedere anche html del forum.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161
    Originariamente inviato da cavicchiandrea
    Posta il link alla pagina pubblica cosi da testare e vedere anche html del forum.
    non posso, è una pagina su autenticazione :-(

    per farvi capire meglio, questa è l'immagine della sequenza di selezione-deselezione della checkbox


    e questo è il l'output html del codice php (per semplicità ho tolto il codice relativo alla selezione del giorno da calendario - click sull'iconcina dell'orologio):
    codice:
    <tr id="type"  onMouseOver="this.className='riga-focus-form'" onMouseOut="this.className='null'" >
    <td nowrap width="1%">Tipo </td>
    <td><SELECT name="type[]" value="1" disabled="true"  class="campo"      >
    	<OPTION	value="0"	>Evento</OPTION>
    	<OPTION	value="1"	SELECTED>Incombente</OPTION>
    	<OPTION	value="2"	>Provvedimento</OPTION>
    	<OPTION	value="3"	>Nota</OPTION>
    </SELECT></td>
    </tr>
    <tr id="done"  onMouseOver="this.className='riga-focus-form'" onMouseOut="this.className='null'" >
    <td nowrap width="1%">Dinamica </td>
    <td><SELECT name="done[]"  class="campo"      >
    	<OPTION	value="0"	SELECTED>In corso</OPTION>
    	<OPTION	value="1"	>In riserva / attesa</OPTION>
    	<OPTION	value="2"	>Completato</OPTION>
    	<OPTION	value="3"	>Da aggiornare</OPTION>
    </SELECT></td>
    </tr>
    <tr id="day"  onMouseOver="this.className='riga-focus-form'" onMouseOut="this.className='null'" >
    <td nowrap width="1%"><span class="obbligat-campo">*</span> Data </td>
    <td><input type="hidden"  name="day[day]"	size="2" value="00"	 size="30"  class="campo" maxlength=2 >	/ <input type="hidden"  name="day[month]"	size="2" value="00"	 size="30"  class="campo"  	maxlength=2 > / <input type="hidden"  name="day[year]"	size="4" value="0000"	 size="30"  class="campo"     	maxlength=4 > </td>
    </tr>
    <tr id="dayend"  onMouseOver="this.className='riga-focus-form'" onMouseOut="this.className='null'" >
    <td nowrap width="1%"> </td>
    <td><span >Impegno senza scadenza <input id="senzaScad" type="checkbox" onchange="javascript:NoScad()" class="campo" checked="checked" > </span></td>
    </tr>
    <tr id="time"  onMouseOver="this.className='riga-focus-form'" onMouseOut="this.className='null'" >
    <td nowrap width="1%">Orario </td>
    <td ><input type="hidden" name="time"   value="00:00"   class="campo"        ></td>
    </tr>
    (lo so che si potrebbe pulire il codice, ma sto modificando codice non mio e siccome è piuttosto incasinato, quello che funziona lo lascio com'è

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da ali7.p
    non posso, è una pagina su autenticazione :-(
    L'originale, ma cio non ti vieta di crearne una copia libera che faciliterebbe chi vorebbe aiutarti, comunque rispetto la tua decisone e ti auguro di risolvere.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161
    ho ridotto all'osso e postato la pagina con il mio problema qui:
    http://www.nuvolacoccola.altervista.org/prova.html
    Quando deseleziono la checkbox la prima volta la select rimane bloccata, riseleziono e rideseleziono e funziona

    di seguito tutto il codice
    codice:
    <script type="text/javascript">
    function NoScad(){
    
    	ElCheck=document.getElementById('senzaScad');
    	if(ElCheck.checked){
    		vDay="00";
    		vMonth="00";
    		vYear="0000";
    		incombente=1;
    		stato=true;
    		ora="00:00";
    		tipo="hidden";
    	}
    	else{
    		var data = new Date();
    		vDay=data.getDate();
    		if (vDay < 10) vDay = "0" + vDay;
    		vMonth=data.getMonth()+1;
    		if (vMonth < 10) vMonth = "0" + vMonth;
    		vYear=data.getFullYear();
    		incombente=0;
    		stato=false;
    		tipo="text";
    	}
    
    	arrCaselleInput = document.getElementsByTagName("input");
    	for (i = 0; i < arrCaselleInput.length; i++)
    	{
    		switch (arrCaselleInput[i].name) 
    		{  
    		    case "day[day]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vDay;
    			
    		      break;
    		    case "day[month]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vMonth;
    			
    		      break;
    			case "day[year]":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = vYear;
    			
    		      break;
    			case "time":
    			arrCaselleInput[i].type = tipo;
    			arrCaselleInput[i].value = ora;
    			
    		      break;
    		}
    	}
    	
    	// se selezionato senza scadenza automaticamente incombente
    	arrSelect = parent.document.getElementsByTagName("select");
    	for (i = 0; i < arrSelect.length; i++)
    	{
    		switch (arrSelect[i].name) 
    		{  
    		    case "type[]":
    				arrSelect[i].disabled = stato;
    				arrSelect[i].value = incombente;
    				
    		    break;
    
    		}
    	}
    
    	
    }
    </script>
    
    <select name="type[]" id="type[]" disabled="true">
    <option value="">Seleziona</option>
    <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>
    <option value="6">6</option>
    </select>
    <input type="checkbox" name="senzaScad" id="senzaScad" value="1" onchange="NoScad();" checked="checked"/>
    <input type="text" name="day[day]" id="day[day]" />
    <input type="text" name="day[month]" id="day[month]" />
    <input type="text" name="day[year]" id="day[year]" />
    <input type="text" name="time" id="time" />

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    prova cambiando evento usa onclick al posto di onchange

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161
    non cambia niente

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    la variabile ora non è valorizzata nell'else...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161
    Originariamente inviato da Vindav
    la variabile ora non è valorizzata nell'else...
    vabbè, non mi interessa, può essere qualunque ora, mi interessa solo cche sia 00:00 e non modificabile (quindi campo nascosto) quando il checkbox è settato.
    I campi input vanno bene, è la select che non capisco perchè non si "sblocchi" alla prima deselezione del checkbox

  10. #10
    Io non vedo questo difetto che tu dici, già la prima volta che deselezioni la casella le input diventano attive...

    Piuttosto, non capisco due cose:
    1) perchè andare a cambiate il tipo di input box e/o andarne a cambiare i valori, invece che renderle semplicemente invisibili e occuparsi lato server dell'azzerare i valori di certi campi?

    2) al caricamento della pagina la scheckbox è attiva, quindi se ho capito bene le input dovrebbero essere hidden, ma naturalmente quaesto non succede, poichè la onchange viene eseguita SOLO quando il valore cambia e quindi NON al caricamento della pagina; dovresti fare in modo che se la casella viene inviata con checked=checked, allora le input vengono inviate con type hidden...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

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.