输入元素找不到其值
Input element not finding its value
function makeUL() {
var products = JSON.parse(localStorage["products"]);
var list = document.createElement('ul');
for(var i = 0; i < products.length; i++) {
if(products[i].amount == 0) {
continue;
}
// Create the list item:
var item = document.createElement('li');
var product = products[i];
var totalPrice = product.amount * product.price;
var toDisplay = product.name + " " + product.amount + " @" + totalPrice + " ";
// Set its contents:
item.appendChild(document.createTextNode(toDisplay));
var inputbox = document.createElement("input");
inputbox.setAttribute("id", "inputboxProduct" + i);
inputbox.addEventListener("change", function(){
changeAmountProd(inputbox.id);
});
item.appendChild(inputbox);
// Add it to the list:
list.appendChild(item);
}
// Finally, return the constructed list:
return list;
}
当您将鼠标悬停在某个字符串上时,这基本上会创建一个列表。该列表将基于本地存储,并为该列表的每个点创建一个输入框。问题是添加事件侦听器。出于某种原因,当该输入框触发事件时,它总是返回一个空值。
function changeAmountProd(inputboxId) {
var products = JSON.parse(localStorage["products"]);
value = document.getElementById(inputboxId).value;
if(value < 1) {
return;
}
products[i].amount = value;
localStorage["products"] = JSON.stringify(products);
makeUL();
}
问题出在change
事件的回调上。您使用 inputbox
变量(可通过闭包获得)引用更改的元素,但在调用回调时,inputbox
将始终指向最后生成的元素。
试试这个:
inputbox.addEventListener("change", function(){
changeAmountProd(this.id);
});
请参阅 addEventListener
试试这个:
function makeUL() {
var products = JSON.parse(localStorage["products"]);
var list = document.createElement('ul');
for(var i = 0; i < products.length; i++) {
if(products[i].amount == 0) {
continue;
}
// Create the list item:
var item = document.createElement('li');
var product = products[i];
var totalPrice = product.amount * product.price;
var toDisplay = product.name + " " + product.amount + " @" + totalPrice + " ";
// Set its contents:
item.appendChild(document.createTextNode(toDisplay));
var inputbox = document.createElement("input");
inputbox.setAttribute("id", "inputboxProduct" + i);
inputbox.addEventListener("change", function(){
changeAmountProd(this.id);
});
item.appendChild(inputbox);
// Add it to the list:
list.appendChild(item);
}
// Finally, return the constructed list:
return list;
}
相关文章:
- [Vue warn]:找不到元素
- 在页面中找不到元素的正确位置.函数未考虑填充
- JQuery找不到元素
- 在Selenium Web驱动程序2.0中找不到元素
- 没有这样的元素:找不到元素:正在验证web元素是否丢失
- jQuery没有'找不到元素或其属性
- 量角器 3.1.1 + 角度 2:找不到元素的可测试性
- jQuery .each() 在 wooCommerce header cart list 中找不到元素
- jQuery 找不到元素
- getElementsByClassName() 在 Firefox 25 中找不到元素
- 在网页上找不到元素,因为它加载了基于javascript的错误并在几秒钟后隐藏(注册表单)
- 如果jQuery不抱怨/抛出错误'在选择器中找不到元素
- jQuery在ngView加载的元素[AngularJS]上找不到元素
- Rails/Javascript选择器赢得'找不到元素
- 可以'在window.deocument.forms[0]中找不到元素
- CasperJS找不到元素,即使我可以在开发人员工具中按CTRL-F它
- PHP或Javascript:找不到元素错误
- onRenderd在Meteor中找不到元素
- 为什么它找不到元素的内部 HTML
- ' getElementById '在' '标签中找不到元素