我的问题是,当我输入不在JSON中的值时,脚本将重置所有收集的值。我试图与其他陈述一起执行此操作,但随后似乎循环不会通过JSON循环。我怎么解决这个问题?阵列看起来像这样:
arr = [[123, "foo", 143,99],[456, "bar", 99,99],[789, "spam", 100]]
有完整的代码:https://pastebin.com/xu0tkvbj
脚本:
var total = 0;
var price = 0;
var productsJSONList = (("{{products_json}}").replace(/&(l|g|quo)t;/g, function(a,b){
return {
l : '<',
g : '>',
quo : '"'
}[b];
}));
var prod = JSON.parse(productsJSONList);
document.getElementById('entry').onsubmit = enter;
function enter() {
var entry = document.getElementById('newEntry').value;
for (var i = 0; prod.length; i++) {
var obj = prod[i];
if (obj[0].toString() === entry.toString()) {
price = parseFloat(obj[2]);
currency = currencyFormat(price);
document.getElementById('entries').innerHTML += '<tr><td></td><td>' + currency + '</td></tr>';
total += price;
document.getElementById('total').innerHTML = currencyFormat(total);
document.getElementById('newEntry').value = '';
return false;
}
}
}
function currencyFormat(number) {
var currency = parseFloat(number);
currency = currency.toFixed(2);
currency = currency + ' zł';
return currency;
}
默认情况下,当您单击表单中的提交按钮时,浏览器会导航到表单action
属性中的URL。这使得在不使用Ajax并触发页面重新加载的情况下提交表格成为可能。
但是,在您的情况下,您要自己处理提交表单,因此您应该禁用默认行为。这就像在传递给onsubmit
处理程序的事件对象上调用preventDefault
一样简单
function enter(event) {
event.preventDefault();
...
}