PDA

View Full Version : [Javascript] Abilitazione/disabilitazione testo


LeRoy
11-09-2007, 14:56
Salve
Grazie anche all'aiuto di voi ho creato una funzione che, quando l'utente clicca su una riga di una tabella, dinamicamente preleva il testo da un DB e lo visualizza. Ho anche creato una funzione Javascript che mi cancella il contenuto del testo facendolo scomparire ma il problema è che vorrei unire le due cose, ovvero fare in modo che se l'utente clicca 1 volta sulla riga compare il testo mentre se riclicco sempre sulla stessa riga il testo scompare. Come posso fare?
Grazie!

usernameIsAlreadyInUse
11-09-2007, 15:02
Nel senso che se la riga è vuota fa apparire il testo, altrimenti la svuota soltanto?

|aura
11-09-2007, 15:05
creare una variabile booleana che di default setti a 0,
dopo di che esegue la funzione 1 quando ci clicchi la prima volta e una volta finito prima di uscire dalla funzioncina la setti a 1, siccome è a 1 la volta successiva chiamerà la seconda funzioncina e all'uscita la piazza a zero... e così via.... spero di essermi spiegata...

usernameIsAlreadyInUse
11-09-2007, 15:07
Fa prima a controllare il contenuto della riga

|aura
11-09-2007, 15:09
in effetti dovrebbe esserci la funzione isEmpty
oppure se la stringa è nulla o "" fai la funzione 1 altrimenti la 2

usernameIsAlreadyInUse
11-09-2007, 15:35
Dici una cosa del genere :

<html>
<head>
<script type="text/javascript">
var xmlhttp
var url="Test";

function getNote(obj){
if(obj.innerHTML==""){
xmlhttp=null;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest()
}else if (window.ActiveXObject){
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
}

if (xmlhttp!=null){
xmlhttp.onreadystatechange=function(){handleNote(obj);}
xmlhttp.open("GET",url,true)
xmlhttp.send(null)
}else{
alert("Il browser non supporta XMLHTTP.")
}
}else{
obj.innerHTML="";
}
}

function handleNote(obj){
if (xmlhttp.readyState==4){
if (xmlhttp.status==200){
obj.innerHTML=xmlhttp.status + " " + xmlhttp.responseText
}else{
alert("Errore di connessione :" + xmlhttp.statusText)
}
}
}

</script>
</head>
<body>
<h2>HttpRequest</h2>
<p><b><a href="#" onclick="getNote(document.getElementById('A1'))">Nota:</a></b>
<span id="A1"></span>
</p>
<p><b><a href="#" onclick="getNote(document.getElementById('A2'))">Nota:</a></b>
<span id="A2"></span>
</p>
<table border=1>
<tr>
<td width="100px" onclick="getNote(this);"></td>
</tr>
</table>
</body>
</html>

LeRoy
12-09-2007, 11:51
Fa prima a controllare il contenuto della riga
:doh:
che fava,non ci avevo pensato!
Grazie mille...e con questa ti devo 2 birre!! :-)

usernameIsAlreadyInUse
12-09-2007, 18:55
Non posso che accettare...Du Demon gelata!!

LeRoy
14-09-2007, 09:17
ho brindato troppo presto: mi sono accorto che non funziona su IE:cry:
le funzioni che utilizzo sono:

// controlla se l'elemento InnerHTML è vuoto ovvero se deve cancellare una nota o crearla
function checkNote(element)
{

var divID = "box_"+escape(element.id);

if(document.getElementById(divID).innerHTML == "")
{
getNote(element);
}
else
{
clearNote(element);
}

}

// Funzioni per la cancellazione delle note
function clearNote(id_nota)
{

var div_note = "box_"+id_nota.id;
var collezione_div = document.getElementById(div_note);
collezione_div.innerHTML = "";
}

// Funzioni per il recupero di una nota 1/2
function getNote(element)
{
createXMLHttpRequest();
var url = "modules.php?op=modload&name=meyer_assistenza&file=note&key_note=" + escape(element.id);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = function(){handleNote(element.id);};
xmlHttp.send(null);
}

// Funzioni per il recupero di una nota 2/2
function handleNote(id_n)
{
if(xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
var divID = "box_"+id_n;
document.getElementById(divID).innerHTML = xmlHttp.responseText;
}
}
}


ed i problemi in IE sono 2:
1) fallisce l'IF nella funzione checkNote: in firefox l'oggetto document.getElementById(divID).innerHTML è vuoto mentre in IE contiene il valore "<tbody></tbody>" :eek:
2) non esegue l'assegnazione "document.getElementById(divID).innerHTML = xmlHttp.responseText;" in handleNote: recupera correttamente i dati (se stampo con un alert xmlHttp.responseText ottengo i dati ritornati dal server) ma mi da un errore sull'assegnamento (MicrosoftScriptDebugger dice "Errore di runtime sconosciuto")
Sapete come correggerli?

isAlreadyInUse
14-09-2007, 09:20
Maledetto IE...do un occhio e ti fo sapere

LeRoy
20-09-2007, 11:28
ho trovato dove era l'errore!
La pagina è strutturata in questo modo: c'è una tabella nella quale vengono create dinamicamente le righe delle richieste, per ogni riga avevo inserito un ulteriore tabella nella quale il javascript doveva inserire le note ed ha IE dava noia questo annidiamento di tabelle. Ho risolto mettendo la tabella delle note dentro un DIV.