[Javascript] Selezionare una checkbox in maniera condizionata

gm_marco

Nuovo Utente
20 Set 2017
3
0
1
58
Salve,
sono un nuovo utente del Forum e vi chiedo un aiuto per risolvere un problema con la gestione di una checkbox da checkare a fronte di un valore recuperato dal DB. Sto manutenendo il codice di una web application J2EE scritta in Java 1.4, JSP/HTML e Ajax. utilizzando un Application Server WebLogic Server 8.1 su framework Jakarta Struts 1.1 per implementare il pattern MVC . Quindi stiamo parlando di codice abbastanza vecchio ...
Di seguito la parte del form dove implemento la checkbox :

Codice:
<td class="etichetta"> Payment
<td class="campo">
<input type="checkbox" name="ins_payment" id="ins_payment"
<c:if test="${(gfn_InsACF.ins_split_payment == 'Y') }"><c:eek:ut value="checked" /></c:if> />
</td>

Ho poi una funzione JS tramite cui attivo la callback ajax :

Codice:
function setPayment(){  
		
		alert('setPayment : '+ document.getElementById('ins_payment').value);

		retrieveURLSplitPay(js_context_path +'/pages/protected/gfn_ajx_ins_cid.jsp?ins_parent_id='+document.getElementById('ins_parent_id').value,'blank_from');
}

che gestisco senza problemi , con la funzione di ritorno dentro la quale controllo l'attributo ins_pay settato nel jsp ajax :

Codice:
	function Pay_processStateChange() {

  	  if (req.readyState == 4) { // Complete
	  			document.getElementById('loadingDiv').style.display = 'none';
	  	      if (req.status == 200) { // OK response
					
	  			if (document.getElementById('ins_split_payment')) 
	  				
				{
					alert('Pay_processStateChange : '+ document.getElementById('ins_pay').value);

					if  (document.getElementById('ins_pay').value="Y") 
					{
						document.getElementById('ins_payment').checked = true;
					}
					else
					{
						document.getElementById('ins_payment').checked = false;
					}
				}
				else
					{	
						alert('Pay_processStateChange - ins_pay vuoto');
					}
						               
      } else {
        alert("Problem with server response:\n " + req.statusText);
      }
	} else	{
			//CentraLoadingDivLite('loadingDiv');
			document.getElementById('loadingDiv').style.display = 'inline';
			}
  }

Questo è il codice ajax dove setto l'attributo :

Codice:
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY>

<%
Connection con = JdbcUtils.getDBConnection();
String ins="N";

if ( request.getParameter("ins_parent_id")!= null) 
{
	ins = JdbcUtils.getSplitPayment(request.getParameter("ins_parent_id"));

}
JdbcUtils.closeConnection(con);
%>
 
 <form>
  <input type="text" name="ins_pay" id="ins_pay" value="<%=ins%>"  />
 </form>
 
</BODY>
</HTML>

Il problema è che la funzione Pay_processStateChange, mi ritorna sempre "Pay_processStateChange - ins_pay vuoto".

Grazie della collaborazione.

Ciao
GM_Marco
 
Ultima modifica:
leggi il valore e poi usa
Codice:
document.getElementById("myCheck").checked = true;
dovrebbe andare.
 
leggi il valore e poi usa
Codice:
document.getElementById("myCheck").checked = true;
dovrebbe andare.
Grazie Mitt, ma la richiesta non era completa, perchè mi è partito il messaggio prima di completare il tutto, se puoi dare un occhio al contenuto completo e farmi sapere , grazie.
 
Vedo che per il controllo prendi il valore da un campo :
Codice:
document.getElementById('ins_pay').value
Ma il valore di ritorno dalla chiamata ajax è stato messo nel campo?
Altrimenti il controllo invece di farlo prelevando il valore dalla pagina, fallo sul valore di ritorno direttamente, magari mettendo dentro una variabile.Poi quando si fanno i controlli if bisogna usare il doppio uguale (==) perchè altrimenti è una assegnazione e con l'if non funziona.
Spero di aver individuato il problema.
 
Vedo che per il controllo prendi il valore da un campo :
Codice:
document.getElementById('ins_pay').value
Ma il valore di ritorno dalla chiamata ajax è stato messo nel campo?
Altrimenti il controllo invece di farlo prelevando il valore dalla pagina, fallo sul valore di ritorno direttamente, magari mettendo dentro una variabile.Poi quando si fanno i controlli if bisogna usare il doppio uguale (==) perchè altrimenti è una assegnazione e con l'if non funziona.
Spero di aver individuato il problema.

Mitt, il campo è valorizzato nell'ajax , che ulteriormente modificato :
Codice:
<%
Connection con = JdbcUtils.getDBConnection();
String ins="N";

if ( request.getParameter("ins_parent_id")!= null) 
{
    ins = JdbcUtils.getSplitPayment(request.getParameter("ins_parent_id"));
    session.setAttribute("ins_pay",ins);

}
JdbcUtils.closeConnection(con);
%>


 <form>
  <input type="hidden" name="ins_splitpayment" value="{sessionScope.ins_pay}"  />
 </form>

Gestisco un attributo session , non so se è corretto ....

Codice:
    function Pay_processStateChange() {

       if (req.readyState == 4) { // Complete
                document.getElementById('loadingDiv').style.display = 'none';
             if (req.status == 200) { // OK response
                   
                if (document.getElementById('ins_pay')) 
                   
                {
                    alert('Pay_processStateChange : '+ document.getElementById('ins_pay').value);

                    if  (document.getElementById('ins_pay').value=="Y") 
                    {
                        document.getElementById('ins_payment').checked = true;
                    }
                    else
                    {
                        document.getElementById('ins_payment').checked = false;
                    }
                }
                else
                    {   
                        alert('splitPay_processStateChange - ins_pay vuoto');
                    }
       
                             
      } else {
        alert("Problem with server response:\n " + req.statusText);
      }
    } else    {
            //CentraLoadingDivLite('loadingDiv');
            document.getElementById('loadingDiv').style.display = 'inline';
            }
  }

Ora non ritorna più vuoto , ma non mi setta la checkbox,
 
Per me,ripeto per me, è un codice troppo elaborato per quello che deve fare e non conosco l'attributo session.
Per le chiamate ajax uso il costrutto con XMLHttpRequest().Prendo il valore di ritorno con l'attributo responseTex.
Personalmente farei così: metterei il ritorno della chaiamata ajax dentro una variabile così
Codice:
var controllo=req.responseText;
o altra istruzione similare e dopo farei la verifica del valore forzando l'eventuale check.
E farei più semplice il codice html della checkbox cioè:
Codice:
<input type="checkbox" name="ins_payment" id="ins_payment">
 

Discussioni simili