Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65

    Disable checkbox in base ai loro value

    Un saluto a tutti gli amici del forum.

    Sono decisamente schiappa in Js e ciò che dovrei fare da quello che so non si può fare , ma ci provo

    lo stesso.

    Dunque: io ho una serie di checkbox che si chiamano N_Alternativa

    <input type="checkbox" name="N_Alternativa" value="5" >
    <input type="checkbox" name="N_Alternativa" value="10" >
    <input type="checkbox" name="N_Alternativa" value="120" >
    <input type="checkbox" name="N_Alternativa" value="3900" >
    <input type="checkbox" name="N_Alternativa" value="7921" >
    ecc...

    Devo fare in modo che uno dei checkbox disabiliti alcuni checkbox precisi i cui value li conosco a

    priori ma le cui posizioni nel form non le conosco.

    ES:
    il check con value="5" deve disabilitare i check con le value="120" e value="3900".

    So che conoscendo la posizione del check nel form potrei fare come segue:
    form.N_Alternativa[2].disabled=true;
    form.N_Alternativa[3].disabled=true;

    Però a me non interessa fare così perchè non so se N_Alternativa[2] ha come value 120.

    Si può fare, o mi devo andare a nascondere?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    codice:
      var cb = document.NOMEFORM.N_Alternativa;
      for (var i=0; i<cb.length; i++) {
        if(cb[i].value == "120") cb[i].disabled = true;
        ....;
      }
    Nota: funziona se ci sono almeno due checkbox con lo stesso nome.

    PS": il nome "form" e` usato dal DOM e non e` un nome valido per un form.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Funziona a meraviglia, Grazie per l'indicazione.

    Avrei altre 2 domande da agganciare a questo problema.


    1) Ci sarebbe la possibilità di fare la stessa cosa che si è fatta con le value ma inserendo delle proprietà particolari da impostare come per es un ID (che in questo caso sarebbe uguale a più check )?

    <input ... value="120" ID="0">
    <input ... value="3900" ID="0">
    <input ... value="7921" ID="1">

    in modo tale da impostare nel ciclo

    if(cb[i].ID == "0") cb[i].disabled = true;


    2) Con scarso successo ho cercato di passare una serie numerica corrispondente ai value dei check costruiti con una variabile ASP.
    <%
    Valori="120,3900"
    %>
    Es onClick="PROVA(<%=Valori%>)"

    e successivamente inserirlo nel ciclo che mi hai impostato.

    var arr = new Array(<%=Valori%>);
    for (var i=0; i<cb.length; i++) {
    for (var k=0; i<arr.length; k++) {
    if(cb[i].value == arr[k]) cb[i].disabled = true;
    }}

    Però non so come farlo funzionare anche perchè già nel passaggio della variabile mi da un errore.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    1. Attenzione alla sintassi.
    Quello che chiedi si puo` fare, ma:
    - l'attributo id si scrive id (non ID)
    - il valore dell'attributo id deve essere un nome valido (iniziare per lettera e contenere solo lettere e numeri)
    - l'attributo id deve essere UNICO nella pagina

    Quindi:
    if(cb[i].id == "ID_OGGETTO") cb[i].disabled = true;


    2. Anzitutto varifica cosa viene passato al browser: controlla il sorgente nel browser e vedi se e` quello che ti apsettavi.
    Poi posta il sorgente che arriva al browser: e` difficile fare caccia agli errori senza vedere il codice dove cacciarli.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Forse col secondo metodo diventa un po troppo complicato per le mie capacità.

    Per quanto riguarda l'uso dell' Id mi sembra che funzioni bene, se non fosse che mi manca ancora un tassello per finire l'operazione.
    All'entrata della pagina alcuni check sono disabilitati.
    Quando il check che deve abilitare altri check è checked, tutto è ok.
    Il codice che uso è il seguente dove ON_OFF ha un valore 1 / 0 a seconda che il check abiliti o disabiliti i check che hanno un particolare Id

    <input type="checkbox" name="N_Alternativa" value="<%=N_Alternativa%>" onClick="PROVA(<%=ID_Domanda%>,<%=ON_OFF%>)" id="<%=ID_Domanda_Livello%>" >


    function PROVA(ID_DOMANDA,ON_OFF){
    var cb = document.myform.N_Alternativa;
    if(ON_OFF == "1")
    for (var i=0; i<cb.length; i++) {
    if(cb[i].id == ID_DOMANDA) cb[i].disabled = false;
    }

    }


    Però quando si riclicca, e quindi il check che precedentemente ha abillitato altri check diventa checked=false, devo capire come fare per far diventare gli altri check disabilitati nuovamente.

    if(ON_OFF == "1")
    if (myform.N_Alternativa[3].checked==true)
    for (var i=0; i<cb.length; i++) {
    if(cb[i].id == ID_DOMANDA) cb[i].disabled = true;
    }

    Il problema è che N_Alternativa[3] dovrebbe essere dinamico: cioè dovrebbe essere lo stesso check che ho cliccato in precedenza.
    C'è un modo per rilevare e passare il numero del check che è stato cliccato in precedenza?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sospetto errori nel passare i parametri, ma per la conferma devi postare questo pezzo di pagina come arriva al browser, senza il sorgente ASP.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Grazie per l'interessamento. CMQ mi sembra di avere risolto.
    Di seguito c'è il codice che ho usato e che funziona al di là di un'un inversione di un valore boleano.


    function PROVA(val,ON_OFF,ID_DOMANDA1){
    var val = parseFloat(val);
    var SVALORE = parseFloat(val-1);
    var cb = document.myform.N_Alternativa;

    if(ON_OFF == "1")
    for (var i=0; i<cb.length; i++) {
    if(cb[i].id == ID_DOMANDA1) cb[i].disabled = false;
    }

    if (cb[SVALORE].checked == false)
    {
    for (var i=0; i<cb.length; i++) {
    if(cb[i].id == ID_DOMANDA1) cb[i].disabled = true;
    }}

    else if(ON_OFF == "2")
    for (var i=0; i<cb.length; i++) {
    if(cb[i].id == ID_DOMANDA1) cb[i].disabled = true;
    }
    }


    La variabile SVALORE = parseFloat(val-1); è il numero dell'input checkbox all'interno del form.

    La prima volta che viene cliccato il chek che deve abilitare altri check, lo fa tranquillamente in base alla variabile ON_OFF
    if(ON_OFF == "1")

    un'altro check che è preposto alla disabilitazione, disabilita.
    if(ON_OFF == "2")

    Ricliccando sul primo check c'è una clausula che permette la disabilitazione
    if (cb[SVALORE].checked == false)

    La cosa strana è che al posto del valore "false" la logica mi porterebbe a pensare che dovrebbe esserci il valore true perchè il check è per l'appunto cliccato.

    Non vorrei che senza accorgermene il valore boleano si invertisse.
    Penso che dovrei usare un comando return ma non ho la più pallida idea di dove piazzarlo.
    Pensi possa avere un senso quello che penso o l'ho buttata troppo a caso??

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Per poter risponedere occorre sapere cosa sono e che valori possono avere i parametri passati alla funzione.

    Ci sono sicuramente delle cose migliorabili, e ci sono errori di logica, che forse non pregiudicano il funzionamento ma che sarebbe bene togliere.
    Esempio: SVALORE e` l'indice di una matrice: come tale deve essere intero; un float potrebbe darti risultati "strani" (ad esempio l'intero 2 puo` diventare in float 1.99999998 che viene quindi troncato in 1).
    ON_OFF secondologica dovrebbe essere un booleano (avere valori true e false), ma tu ci metti un intero (mi pare)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    ID_Domanda 72
    2.2) Cute pericatetere:
    RISPOSTE:
    <input type="checkbox" name="N_Alternativa" value="228" onClick="Abilita(58,1,72)" id="0">
    SI
    <input type="checkbox" name="N_Alternativa" value="229" onClick="Abilita(59,2,72)" id="0">
    NO

    ID_Domanda 73
    Se SI, indicare tipo di tecnica:
    RISPOSTE
    <input type="checkbox" name="N_Alternativa" value="230" onClick="Abilita(60,0,0)" id="72" Disabled >
    Con tecnica semiquantitativa
    <input type="checkbox" name="N_Alternativa" value="231" onClick="Abilita(61,0,0)" id="72" Disabled >
    Con tecnica quantitativa




    COme dici tu SVALORE dovrebbe sicuramente essere un intero.

    In alcuni casi ON_OFF deve avere un terzo valore che io ho impostato come 0 perchè la funzione PROVA() è incorporporata dentro un'altra funzione che viene richiamata solo se ON_OFF!=0

    function Abilita(val,ON_OFF,ID_DOMANDA1){
    var v1 = parseFloat(val-2);
    myform.N_Alternativa[v1].checked=false;
    if(ON_OFF != "0") onclick=PROVA(val,ON_OFF,ID_DOMANDA1)
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ci sono errori nel codice HTML. Occorre quindi prima risolvere quelli; altrimenti il comportamento dei browser non e` prevedibile.

    L'attributo id di un tag deve essere un nome unico. E deve essere un nome valido (iniziare per lettera e contenere solo lettere e numeri).

    Tu usi id come se fosse un value.

    Potresti inserire anche il secondo valore dentro il value (ad esempio separato da un | ), oppure potresti semplicemente passare il valore alla funzione (se non ti serve).

    ---
    Allora quello che hai chiamato ON_OFF non e` una variabile booleana, ma un flag: ti conviene dare un nome diverso.

    PS. in programmazione NON si usano variabili MAIUSCOLE (di solito tali sequenze designano delle costanti).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.