Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    document.form ecc ecc non è un oggetto

    Salve a tutti. Ho una tabella (dinamica) che stampa a video i dati di un database e per ogni riga c'è una checkbox.
    Voglio che ogni volta che l'utente clicka sulla chbx il colore della riga cambi. Se invece viene deselezionata deve tornare al colore che ho settato io.
    Ho scritto questa funzione ma ho un problema:


    function selectMessages(itemId) {
    if (!document.getElementById)
    return;
    var chbxId=document.getElementById(itemId);
    var chbxName=document.frmMessages.chbxId.checked;

    var rigaId=100*itemId
    var rigaMsg=document.getElementById(rigaId);

    rigaMsg.style.backGroundColor=(chbxName) ? "#000000" : "ffffff";

    rigaMsg)
    }

    quando clicko su una casella di controllo mi fa:

    document.frmMessages.chbxId.checked nn è un oggetto.


    Nella pagina html ho le seguenti caratteristiche:

    codice:
    				<form method='post' name='frmMessages' action='user_delete_gotmessage.asp' target='UsrDeleteMsg' >
    
    <tr id='" & 100*i & "' style='background-color:#" & strColor & ";'>
    
    <input onClick="selectMessages('" & i & "');" id='" & i & "' & type='checkbox' name='chbMsgId_" & i & "' & "'>

    i è la variabile contatore dello script asp che assegna un id univoco ad ogni riga. E' moltiplicato per 100 perché assegno già il valore i alla checkbox (come id). strColor è la variabile asp che mi permette di scegliere il colore della riga (quando nn è checkata la casella).
    Nella funzuione selectMessages passo i come parametro.
    Il nome della checkbox per ora non mi serve. Sbaglio? Posso eliminarlo?
    Grazie a chi mi da una mano, perché ci sto davvero perdendo la testa.
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2

    lo credo!

    io non vedo nessun checkbox di nome "chbxId"
    ma casomai "chbMsgId_"
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  3. #3
    Ho risolto quel problema. Grazie dell'interessamento (qll era un errore di ortografia, ma nulla d +). Ora devo fare un'altra cosa e lo script è completo. La funzione corretta è questa:

    //### MODIFICA DEL COLORE DELLA RIGA SELEZIONATA ###
    function selectMessages( n, color) {
    var checked = document.forms['frmMessages'].elements['chbMsgId' + n].checked;
    var previousColor=color;
    var rowStyle = document.getElementById( 'row' + n ).style;
    rowStyle.backgroundColor = checked ? "#61c1e7" : previousColor;
    }

    Ora devo fare in modo che ci sia un comando che clicando su una casella mi selezioni le righe (e fin qui tutto ok). Quando si riclicka deve riportare le varie righe ai loro colori originali. I colori sono variabili a seconda dello status del messaggio (ogni riga è un messaggio) per esempio (verde, rossa, blu e gialla)
    E' necessario riportare ogni riga al suo esatto colore, e x fare questo dovrei salvare da qlk parte il colore precedente all'evidenziazione.
    La funzione è questa ma nn mi annulla il colore di evidenziazione.
    //### SELEZIONE DI TUTTE LE RIGHE ###
    function selectAll(checked) {
    var n = 1;

    var blnAllCheck= document.frmMessages.chbSelectAll.checked;

    while(document.getElementById( 'row' + n )) {
    document.forms['frmMessages'].elements['chbMsgId' + n].checked = checked;
    var rowAllStyle = document.getElementById( 'row' + n ).style;
    var color=rowAllStyle.backgroundColor;
    selectMessages( n, color );
    n++;
    }
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    se ho capito bene
    dal momento che li devi poter riportare tutti allo stadio originario conviene che ti popoli un' array usando come indice il parametro n della funzione selectMessages e come valore il colore da ripristinare

    quando devi selezionarli tutti, controlla quelli al momento deselezionati e riprendi x ognuno il valore dall' array...

  5. #5
    Hai centrato però vorrei avere una mano nella scrittura del codice, putroppo sto imparando e ancora nn sono molto pratico. Mi aiuteresti?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ho buttato giu questo, vedi se fa al caso tuo
    codice:
    <script type="text/javascript">
    var arrCol=new Array();
    
    function selectMessages(n,color) { 
      var checked=document.forms['frmMessages'].elements['chbMsgId'+n].checked;
      arrCol[n]=color; 
      var rowStyle=document.getElementById('row'+n).style; 
      rowStyle.backgroundColor=(checked)?"#61c1e7":arrCol[n]; 
    }
    
    function selectAll(checked) { 
      var n = 1;
      while(document.getElementById('row'+n)) {
        var obj=document.forms['frmMessages'].elements['chbMsgId'+n]
        var rowAllStyle=document.getElementById('row'+n).style;
        if(obj.checked!=checked){
          obj.checked=checked;
          selectMessages(n, ((checked)?rowAllStyle.backgroundColor:arrCol[n]));
        }
        n++;
      }
    }
    </script>
    <form name="frmMessages">
    <div id="row1" style="background-color:#ff0000"><input type="checkbox" name="chbMsgId1" onclick="selectMessages(1,'#ff0000')" /> row 1</div>
    <div id="row2" style="background-color:#00ff00"><input type="checkbox" name="chbMsgId2" onclick="selectMessages(2,'#00ff00')" /> row 2</div>
    <div id="row3" style="background-color:#0000ff"><input type="checkbox" name="chbMsgId3" onclick="selectMessages(3,'#0000ff')" /> row 3</div>
    <input type="checkbox" name="chbSelectAll" onclick="selectAll(this.checked)" /> seleziona/deseleziona tutti
    </form>
    ciao

  7. #7
    Ho modificato leggermente lo script, il secondo parametro che passo alla funzione non è + il colore di sfondo (che cambia) ma lo status del messaggio (da cui dipende direttamente il colore di sfondo). La funzione a questo punto diventa:

    //### MODIFICA DEL COLORE DELLA RIGA SELEZIONATA ###
    function selectMessages( n, status) {
    var checked = document.forms['frmMessages'].elements['chbMsgId' + n].checked;
    var strStatus=status;
    var previousColor
    switch (strStatus) {
    case "S" :
    previousColor="#28D28E";
    break;
    case "G" :
    previousColor="#D28E28";
    break;
    case "R" :
    previousColor="#D6D012";
    break;
    }
    arrColors[n]=previousColor;
    var rowStyle = document.getElementById( 'row' + n ).style;
    rowStyle.backgroundColor = checked ? "#61c1e7" : previousColor;
    }


    la dichiarazione dell'array è superflua.

    la seconda funzione vorrei farla basare anche in questo modo prendendo il colore di sfondo e modificando la variabile status da passare alla funzione ma c'è un problema:



    function selectAll(checked) {
    var n = 1;

    var statusMsg;
    while(document.getElementById( 'row' + n )) {
    var obj=document.forms['frmMessages'].elements['chbMsgId' + n].checked;

    var rowAllStyle = document.getElementById( 'row' + n ).style.backgroundColor;
    arrColors[n]=rowAllStyle;

    switch (arrColors[n]) {
    case "#28d28e" :
    statusMsg="S";
    break;
    case "#D28E28" :
    statusMsg="G";
    break;
    case "#D6D012" :
    statusMsg="R";
    break;
    }


    if (obj.checked!=checked){
    obj.checked=checked;
    selectMessages(n, ((checked)?rowAllStyle.backgroundColor:arrColors[n]));
    }
    alert(statusMsg);
    n++;

    }

    }
    per qualche arcano motivo la switch non funziona. E' strano perché se metto un alert in cui visualizzo il parametro me lo stampa tranquillamente ma se poi visualizzo lo status mi dice sempre UNDEFINED. Come posso fare a sistemare la select? Sono vicino alla soluzione ma non capisco come posso terminare lo script!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

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.