@KillerWorm

Originariamente inviata da
KillerWorm
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");
}
}