【问题标题】:javascript error return from select从选择返回 javascript 错误
【发布时间】:2017-06-15 10:36:57
【问题描述】:

我不明白为什么如果我选择第二个选项“carne”,它会返回第一个选项的值。

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,肯定会很愚蠢,但提前感谢您的回答。

【问题讨论】:

    标签: javascript html arrays select


    【解决方案1】:

    因为在 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>

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2017-08-24
      • 1970-01-01
      • 2017-10-24
      • 2019-11-22
      • 1970-01-01
      相关资源
      最近更新 更多