2017-06-15 81 views
1

我不明白为什么如果我选择第二个选项'carne'它返回第一个选项的值。从选择返回的javascript错误

var nodoChiave; 
var nodoCerca; 
var nodoRisultato; 

var ricettario = [ 
{ 
    categoria: "primo", 
    nome: "pasta", 
    difficolta: "media", 
    preparazione: 30 
}, 
{ 
    categoria: "secondo", 
    nome: "carne", 
    difficolta: "bassa", 
    preparazione: 15 
} 
]; 

function calcolaListaDescrizioni(ricette) { 
try { 
    var listaDescrizioni = []; 
    for (var i = 0; i < ricette.length; i++) { 
     var ricetta = ricettario[i]; 
     var s = "(" + ricetta.categoria + ") " + ricetta.nome + ", difficolta " + ricetta.difficolta + ", minuti di preparazione " + ricetta.preparazione; 
     listaDescrizioni.push(s); 
    } 
    return listaDescrizioni; 

} catch (e) { 
    alert("calcolaListaDescrizioni" + e); 
} 
} 

function gestoreCerca() { 
try { 
    var chiave = nodoChiave.value; 
    var ricette = ricercaEsatta(chiave); 
    var listaDescrizioni; 
    if (ricette.length != 0) { 
     listaDescrizioni = calcolaListaDescrizioni(ricette); 
    } else { 
     listaDescrizioni = ["nessuna ricetta trovata"]; 
    } 
    creaLista(nodoRisultato, listaDescrizioni); 
} catch(e) { 
    alert("gestoreCerca" + e); 
} 
} 

function ricercaEsatta(chiave) { 
var listaRicette = []; 
var i = 0; 
while((i < ricettario.length) && (ricettario[i].nome != chiave)) { 
    i++; 
} 
if (i < ricettario.length) { 
    listaRicette.push(ricettario[i]); 
} 
console.log(listaRicette) ; 
return listaRicette; 
} 

function creaLista(nodoLista, elementi) { 
rimuoviFigli(nodoLista); 
for (var i = 0; i< elementi.length; i++) { 
    var elemento = elementi[i]; 
    var nodoElemento = document.createElement("li"); 
    nodoLista.appendChild(nodoElemento); 
    var nodoTesto = document.createTextNode(elemento); 
    nodoElemento.appendChild(nodoTesto); 
} 
} 

function rimuoviFigli(nodo) { 
while (nodo.childNodes.length > 0) { 
    nodo.removeChild(nodo.firstChild); 
} 
} 

function inizializza(){ 
try { 
    nodoChiave = document.getElementById("chiave"); 
    nodoCerca = document.getElementById("cerca"); 
    nodoRisultato = document.getElementById("risultato"); 

    nodoCerca.onclick = gestoreCerca; 
} catch(e) { 
    alert("inizializza" + e); 
} 
} 

window.onload = inizializza; 

和HTML:

<body> 
<b> Le mie ricette: </b> 
<input type="text" id="chiave"> 
<input type="button" id="cerca" value="Cerca"> 
<br> 
<br> 
<div id="risultato"></div> 
</body> 
</html> 

如果我搜索的东西是不存在它工作在数组中。 ,当我选择第二个选项时,ricercaMultipla()的console.log()返回数组'ricettario'的正确项目。 我正在学习JavaScript,它肯定会很愚蠢,但预先感谢您的答案。

回答

0

因为在for循环您正在访问ricettario代替ricette

改变这一行

var ricetta = ricettario[i]; 

var ricetta = ricette[i]; 

var nodoChiave; 
 
var nodoCerca; 
 
var nodoRisultato; 
 

 
var ricettario = [ 
 
{ 
 
    categoria: "primo", 
 
    nome: "pasta", 
 
    difficolta: "media", 
 
    preparazione: 30 
 
}, 
 
{ 
 
    categoria: "secondo", 
 
    nome: "carne", 
 
    difficolta: "bassa", 
 
    preparazione: 15 
 
} 
 
]; 
 

 
function calcolaListaDescrizioni(ricette) { 
 

 
try { 
 
    var listaDescrizioni = []; 
 
    for (var i = 0; i < ricette.length; i++) { 
 
     var ricetta = ricette[i]; 
 
     var s = "(" + ricetta.categoria + ") " + ricetta.nome + ", difficolta " + ricetta.difficolta + ", minuti di preparazione " + ricetta.preparazione; 
 
     
 
     listaDescrizioni.push(s); 
 
    } 
 
    return listaDescrizioni; 
 

 
} catch (e) { 
 
    alert("calcolaListaDescrizioni" + e); 
 
} 
 
} 
 

 
function gestoreCerca() { 
 
try { 
 
    var chiave = nodoChiave.value; 
 
    var ricette = ricercaEsatta(chiave); 
 
    var listaDescrizioni; 
 
    if (ricette.length != 0) { 
 
     listaDescrizioni = calcolaListaDescrizioni(ricette); 
 
    } else { 
 
     listaDescrizioni = ["nessuna ricetta trovata"]; 
 
    } 
 
    creaLista(nodoRisultato, listaDescrizioni); 
 
} catch(e) { 
 
    alert("gestoreCerca" + e); 
 
} 
 
} 
 

 
function ricercaEsatta(chiave) { 
 
var listaRicette = []; 
 
var i = 0; 
 
while((i < ricettario.length) && (ricettario[i].nome != chiave)) { 
 
    ++i; 
 
} 
 
if (i < ricettario.length) { 
 
    listaRicette.push(ricettario[i]); 
 
} 
 
console.log(listaRicette) ; 
 
return listaRicette; 
 
} 
 

 
function creaLista(nodoLista, elementi) { 
 
rimuoviFigli(nodoLista); 
 
for (var i = 0; i< elementi.length; i++) { 
 
    var elemento = elementi[i]; 
 
    var nodoElemento = document.createElement("li"); 
 
    nodoLista.appendChild(nodoElemento); 
 
    var nodoTesto = document.createTextNode(elemento); 
 
    nodoElemento.appendChild(nodoTesto); 
 
} 
 
} 
 

 
function rimuoviFigli(nodo) { 
 
while (nodo.childNodes.length > 0) { 
 
    nodo.removeChild(nodo.firstChild); 
 
} 
 
} 
 

 
function inizializza(){ 
 
try { 
 
    nodoChiave = document.getElementById("chiave"); 
 
    nodoCerca = document.getElementById("cerca"); 
 
    nodoRisultato = document.getElementById("risultato"); 
 

 
    nodoCerca.onclick = gestoreCerca; 
 
} catch(e) { 
 
    alert("inizializza" + e); 
 
} 
 
} 
 

 
window.onload = inizializza;
<body> 
 
<b> Le mie ricette: </b> 
 
<input type="text" id="chiave"> 
 
<input type="button" id="cerca" value="Cerca"> 
 
<br> 
 
<br> 
 
<div id="risultato"></div> 
 
</body> 
 
</html>