2017-06-15 39 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>