Immagino...anche io all'inizio ebbi alcune difficoltà a capire i concetti e il funzionamento del DOM con JavaScript.
Per la funzione che hai scritto, deduco che tu debba "ripulire" il valore di un campo di testo quando il checkbox è deselezionato.
A questo proposito, suppongo che i 2 argomenti che passi alla funzione (chkbox e elem) siano i valori degli attributi id del checkbox e del campo di testo. Ovvero, presumo che nel codice i due elementi siano scritti a grandi linee così:
codice:
<input type="text" id="elem" value="">
<input type="checkbox" id="chkbox">
dove ovviamente "elem" e "chkbox" sono gli id dei due campi. Se è così la funzione che hai scritto è...quasi esatta!
Dico quasi perché hai usato document.form1.getElementById(). Il metodo getElementById() (che fa parte del DOM standard del W3C) è un metodo dell'oggetto document, non dell'oggetto form. Questo ti "libera" dal passare per forza dal form per riferirti ad uno dei suoi campi. La funzione diventa quindi:
codice:
function cancella_valore(chkbox,elem) {
if (document.getElementById(chkbox).checked==false) {
document.getElementById(elem).value = '';
}
}
Nota anche che quel "return false" che avevi messo alla fine della funzione non serve.
In pratica, hai due modi di accedere ai campi del form, a seconda che usi il valore dell'attributo name o dell'attributo id per riferirti ad essi.
Se usi il valore di name, sei obbligato a passare per il form: document.NOMEFORM.NOMECAMPO.
Se usi il valore di id, non devi passare per il form e usi il metodo più standard: document.getElementById(IDCAMPO).
Una cosa che può tornarti utile. Il metodo getElementById() è "migliore" perché ti permette di indicare tra le sue parentesi anche un id "composto". Nel caso avessi ad es. più campi che hanno degli id formati da una stessa parola seguita da un numero progressivo (campo1, campo2, ecc.), puoi passare alla funzione semplicemente il numero progressivo (chiamiamolo n) e riferirti all'oggetto con: document.getElementById("campo" + n). Se provi a fare la stessa cosa utilizzando il "vecchio" DOM, ossia riferendoti all'oggetto tramite name, la cosa non funziona, perché JavaScript non riesce a "concatenare" in automatico un riferimento ad oggetti di tipo Object con altri di tipo String ottenendo un Object. In quel caso avrebbe bisogno di un eval() per "valutare" la stringa e convertirla esplicitamente in un Object prima di accedere alle proprietà dell'oggetto. Esempio:
var campo = eval("document.form1.campo" + n); /* prima determina l'oggetto */
campo.value = ""; /* poi accede alla proprietà value dell'oggetto */