abilitare menu a tendina tramite relativa chekbox

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
Ciao a tutti
Sono nuovo del forum, spero di aver scelto la sezione corretta, anche se il problema riguarda anche javascript.
Ho questo problema... ho una tabella, dove i dati sono ricavati da un db in sql, sostanzialmente ogni riga ha una checkbox che deve abilitarmi il menu a tendina di quella medesima riga.
Carico una immagine per essere più chiaro.
Questo avviene solo per la prima anche cliccando le successive checkbox non funziona.
Qualcuno può aiutarmi?
Grazie!!!

img.png
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
questo è il codice relativo alla tabella che estrae i dati dal db:
PHP:
$q=mysql_query("SELECT *

                FROM prodotti

                ORDER BY nome_prodotto;");


$r=mysql_num_rows($q);

    if ($r<=0){

        echo "<h4><img src='icone/error.png' style='border:0; width:100px;'/>ATTENZIONE!!! NON SONO PRESENTI PRODOTTI</h4>";

    }else{

    echo "<table class='table3'>";

    echo "<tr><th >Codice Prodotto</th><th>Nome Prodotto</th><th>Album</th><th>Quantità Disponibile</th><th>Prezzo Unitario</th><th>Quantità Ordinata</th><th>Seleziona</th></tr>";

    echo "<tr>";

    while ($r=mysql_fetch_array($q)){

        echo "<td width='120px'>".$r['codice']."</td>";

        echo "<td width='380px'>".$r['nome_prodotto']."</td>";

        echo "<td width='30px'>".$r['album']."</td>";

        echo "<td width='30px'>".$r['q.ta']."";

        if($r['q.ta']<='0'){

             echo "<img src='icone/red.png' style='border:0; width:20px; float:left;'/>";

            }elseif($r['q.ta']=='1'){

                echo "<img src='icone/orange.png' style='border:0; width:20px; float:left;'/>";

            }else{

                echo "<img src='icone/green.png' style='border:0; width:20px; float:left;'/>";

            }

        echo"</td>";

        echo "<td width='30px'>".$r['prezzo']."€</td>";

        echo "<td width='80px'>";

            echo "<select id='menu1' name='qta_ordinata' disabled='disabled'>";

                echo "<option selected='selected'>Seleziona una q.tà</option>";

        for ($c=1; $c<=$r['q.ta']; $c++){

                   echo "<option>$c</option>";

                   }

            echo "</select>";

        echo "<td width='10px'>";

        echo "<input type='checkbox' name='sel[]' value='".$r['codice']."' onclick='abilita_select(this)'></td>";

        echo "</tr>";

    }}

echo "</table>";


questo è la parte java:


<script>

    function abilita_select(obj){

        var stato=(obj.checked)?'':'disabled';

        document.getElementById('menu1').disabled=stato;}

</script>
Grazie!!!
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.275
328
83
@[email protected]@

Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strument
box inserisci.png

Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!

Grazie

Usa i tag per il futuro
mi raccomando altrimenti sarò costretto a cancellare le discussioni
 

ninja72

Utente Attivo
15 Giu 2020
23
4
3
Ciao, prima di tutto modifica l'id Menu1 con una class="menu" inoltre aggiungi in "input type='checkbox'" class="sel", spero ti funzioni correttamente.

JavaScript:
'use strict';
        let menu = Array.from(document.getElementsByClassName('menu'));
        let checkbox = Array.from(document.getElementsByClassName('sel'));

        checkbox.forEach((e, key) => e.addEventListener('click', element => {
            if (element.target.checked == true) {
                menu[key].disabled = false;
            } else {
                menu[key].disabled = true;
            }
        }, false));
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
grazie ninja72 per la risposta...
ho provato ma non funziona non abilita nessun menù.
Ho sostituito il mio codice java con il tuo, fatto le sostituzioni che mi hai chiesto ma niente.
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
riposto il codice java, ho sostituito menu con ddl, perchè ho un'altra classe che si chiama cosi...
JavaScript:
<script>
'use strict';
      let ddl = Array.from(document.getElementsByClassName('ddl'));
      let checkbox = Array.from(document.getElementsByClassName('sel'));

      checkbox.forEach((e, key) => e.addEventListener('click', element => {
          if (element.target.checked == true) {
              ddl[key].disabled = false;
          } else {
              ddl[key].disabled = true;
          }
      }, false));
</script>
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
e questo è il codice della tabella con le modifiche.
PHP:
$q=mysql_query("SELECT *
                FROM prodotti
                ORDER BY nome_prodotto;");

$r=mysql_num_rows($q);
    if ($r<=0){
        echo "<h4><img src='icone/error.png' style='border:0; width:100px;'/>ATTENZIONE!!! NON SONO PRESENTI PRODOTTI</h4>";
    }else{
    echo "<table class='table3'>";
    echo "<tr><th >Codice Prodotto</th><th>Nome Prodotto</th><th>Album</th><th>Quantità Disponibile</th><th>Prezzo Unitario</th><th>Quantità Ordinata</th><th>Seleziona</th></tr>";
    echo "<tr>";
    while ($r=mysql_fetch_array($q)){
        echo "<td width='120px'>".$r['codice']."</td>";
        echo "<td width='380px'>".$r['nome_prodotto']."</td>";
        echo "<td width='30px'>".$r['album']."</td>";
        echo "<td width='30px'>".$r['q.ta']."";
        if($r['q.ta']<='0'){
             echo "<img src='icone/red.png' style='border:0; width:20px; float:left;'/>";
            }elseif($r['q.ta']=='1'){
                echo "<img src='icone/orange.png' style='border:0; width:20px; float:left;'/>";
            }else{
                echo "<img src='icone/green.png' style='border:0; width:20px; float:left;'/>";
            }
        echo"</td>";
        echo "<td width='30px'>".$r['prezzo']."€</td>";
        echo "<td width='80px'>";
            echo "<select class='ddl' name='qta_ordinata' disabled='disabled'>";
                echo "<option>Seleziona una q.tà</option>";
        for ($c=1; $c<=$r['q.ta']; $c++){
                   echo "<option>$c</option>";
                   }
            echo "</select>";
        echo "<td width='10px'>";
        echo "<input type='checkbox' class='sel' name='sel[]' value='".$r['codice']."'></td>";
        echo "</tr>";
    }}
echo "</table>";
 

ninja72

Utente Attivo
15 Giu 2020
23
4
3
Da me funziona , testato con FF, chrome e edge, (win10 in locale), da remoto forse necessità di una verifica sul caricamento totale del DOM della pagina, prova in questo modo.

JavaScript:
 'use strict';
        document.addEventListener('DOMContentLoaded', f);

        function f() {
            let ddl = Array.from(document.getElementsByClassName('ddl'));
            let checkbox = Array.from(document.getElementsByClassName('sel'));

            checkbox.forEach((e, key) => e.addEventListener('click', element => {
                if (element.target.checked == true) {
                    ddl[key].disabled = false;
                } else {
                    ddl[key].disabled = true;
                }
            }, false));
        }
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
perfetto grazie mille funziona a meraviglia!!! :):):)
ne approfitto per chiederti un'altra cosa.
ho creato 2 array (sel[] e qta_ordinata[]), dove all'interno, rispettivamente, salvo i codici dei prodotti selezionati e le q.tà.
il mio problema è il seguente:
riesco a passare gli array nella pagina successiva che fa l'inserimento nel db (inserimento in 2 tabelle diverse ordine e appartengono), ma non riesco ad avere i dati corretti, quello delle q.tà mi da un valore errato, credo che legga l'indice e non il valore.
posto il codice della pagina di salvataggio.

Sicuramente va fatto un ciclo di controllo prima dell'inserimento nella tabella appartengono

PHP:
$cognome=$_POST['cognome'];
$nome=$_POST['nome'];
$indirizzo=$_POST['indirizzo'];
$data_ordine=$_POST['data_ordine'];
$pagato=$_POST['pagato'];
$data_pagamento=$_POST['data_pagamento'];
$data_spedizione=$_POST['data_spedizione'];
$costo_spedizione=$_POST['costo_spedizione'];
//dati prodotti catalogo
$prodotto=$_POST['sel'];
$qta_ordinata=$_POST['qta_ordinata'];

//trasformazione dati in maiuscolo
$COGNOME=strtoupper($cognome);
$NOME=strtoupper($nome);
$INDIRIZZO=strtoupper($indirizzo);
$NOME=strtoupper($nome);

//verifico i dati
foreach ($prodotto as $p_sel=>$value){
    echo "".$p_sel."-".$value."**";
}
    echo "</br>";
    foreach ($qta_ordinata as $nr_qt=>$nr_value){
            echo "".$nr_qt."-".$nr_value."++";
}


//inserisco i prodotti nel db
if($cognome!="" and $nome!="" and $indirizzo!="" and $data_ordine!=""){
        mysql_query ("INSERT INTO ordine VALUES
        ('".$COGNOME." ".$NOME."', '".$data_ordine."', '".$pagato."', '".$data_pagamento."', '".$INDIRIZZO."', '".$data_spedizione."', '".$costo_spedizione."');");
      mysql_query ("INSERT INTO appartengono VALUES
        ('".$value."', '".$nr_value."', '".$data_ordine."','".$COGNOME." ".$NOME."');");
    echo "<h3><img src='icone/ok.png' style='border:0; width:100px;'/>ORDINE INSERITO CORRETTAMENTE.</h3>";
    }else{
        echo "<h4><img src='icone/warning.png' style='border:0; width:100px;'/>ATTENZIONE!!! COMPLETARE TUTTI I CAMPI</h4>";
    }
 

ninja72

Utente Attivo
15 Giu 2020
23
4
3
hai corretto questa riga ?
da:
echo "<select class='ddl' name='qta_ordinata' disabled='disabled'>";
a:
echo "<select class='ddl' name='qta_ordinata[]' disabled='disabled'>";
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
si.
gli array contengono i dati corretti, però quando vado a fare l'inserimento, lo fa, ma ci sono dati errati
mi spiego meglio il primo array sel[] contiene i codici dei prodotti in questo formato
0-56342**1-23098**
mentre il secondo qta_ordinata[] contiene i valori che seleziono dal menù a tendina fatto prima e
0-1++1-2++
nella tabella appartengono mi inserisce correttamente tutto tranne le q.tà mi inserisce sempre e solo 1 anche se dalla stampa del array qta_ordinata c'è come valore 2.
sembra che inserisca l'indice del valore e non il valore.
 

ninja72

Utente Attivo
15 Giu 2020
23
4
3
potresti verificare il tipo di dato che stai passando con echo gettyp($tuavariabile), magari è diversa dal tipo assegnata al database.
 

ninja72

Utente Attivo
15 Giu 2020
23
4
3
Il mio dubbio era sul fatto che potevi passare una dato di tipo stringa ad un campo integer del database, per quello ti ho chiesto il controllo con echo gettyp($nr_value) ma visto che sono di tipo varchar il problema è altrove. Se non ho capito male su $nr_value si trovano le quantità dell'ordine in riferimento al prodotto, verifica se siano ciclate correttamente prima dell'inserimento. Con un minimo di debug non dovrebbe essere complesso risolvere, putroppo non avendo database con i relativi dati sottomano per me è un po' difficile riprodurre il problema.
 

[email protected]@

Nuovo Utente
19 Lug 2020
10
0
1
risolto anche questo problema.
semplicemente ho fatto un ciclo for utilizzando la variabile come indice dell'array.
Credevo fosse più complesso, ho provato la soluzione più semplice ed ha funzionato al primo colpo.

Grazie per l'aiuto @ninja72!!!