@KillerWorm

Quote Originariamente inviata da KillerWorm Visualizza il messaggio
Se devi eseguire un controllo generico sui due valori presi assieme, puoi usare l'operatore ^ (XOR) che copre tutte le casistiche da te indicate, secondo questa tabella della verità:
Piccola nota di metodo: esattamente come normalmente usiamo il doppio && oppure il doppio || nelle comparazioni booleane (invece dei singoli & e |), così, sempre quando abbiamo a che fare con booleani e non con numeri, scriveremo l'operatore XOR con !== piuttosto che con ^ – il quale altrimenti, esattamente come & e |, convertirebbe i booleani in valori numerici che poi verrebbero nuovamente convertiti in booleani negli if statements). Per capirci leverò lo XOR bit per bit dal tuo if e inserirò lo XOR booleano…

codice:
if ((codice !== "") !== (valore > 0)){

o, levando le parentesi (che è lo stesso)…:

codice:
if (codice !== "" !== valore > 0){

Insomma, io farei così:

codice:
function controlloCampi(){
    var codice = form1.codice.value;
    var valore = parseFloat(form1.valore.value);

    if (isNaN(valore)) { 
        alert("Il campo \"valore\" dev\'essere di tipo numerico");
        return;
    }

    if ((valore === 0) !== (codice.length === 0)) {
        alert("errore");
    } else {
        alert("tutto ok");
    }
}

Giusto per la cronaca… esisterebbe anche quest'altra soluzione per quell'if

codice:
function controlloCampi(){
    var codice = form1.codice.value;
    var valore = parseFloat(form1.valore.value);

    if (isNaN(valore)) { 
        alert("Il campo \"valore\" dev\'essere di tipo numerico");
        return;
    }

    if (codice.length === 0 ? valore > 0 : valore === 0) {
        alert("errore");
    } else {
        alert("tutto ok");
    }
}