我是一名Java程序员,试图编写一些javaScript。忍受我。
我想要一个函数,当在表格的任何一个输入字段中输入数字时更新总数。我在$(document).ready(function() { ... }
$("#lineCountTable").find('input').each().bind('keyup', function() {
updateTotal(this);
});
在Chrome的调试屏幕中,我得到:
未捕获的TypeError:无法读取未定义的属性'call'“。指向的行号为jQuery-1.8.2.js:611。
我认为在定义要调用的函数时出现语法错误。 updateTotal(inputVar)
函数稍后在JS文件中正确定义;如果有人感兴趣,那就是:
function updateTotal(inputVar) {
var row = inputVar.closest('tr');
var lineCharge = row.find("dlsRowCharge").html().trim();
var total = 0.0
var lineCount = inputVar.val();
if (isNumeric(lineCount)) {
total = math.abs(lineCount * lineCharge).toFixed(2);
row.children(".dlsRowTotal").html("$ " + total);
}
}
我知道这些功能通常都是内联的;我宁愿单独定义它们并调用它们,除非那是不可能的。
答案 0 :(得分:4)
这里有一些问题:
each()
需要处理函数,这是导致错误的原因。也就是说,在这种情况下不需要它。on()
而不是bind()
。this
将是一个DOM元素,您无法调用jQuery的closest()
方法。不可否认,有一种原生的closest()
方法,但它还没有得到很好的支持。为了使代码可靠地工作,您需要将this
包装在jQuery对象中。find()
需要一个有效的选择器,dlsRowCharge
不是。据推测,这应该是.dlsRowCharge
math
应为Math
尽管如此,试试这个:
$("#lineCountTable").find('input').on('keyup', function() {
updateTotal($(this));
});
function updateTotal($inputVar) {
var $row = $inputVar.closest('tr');
var lineCharge = $row.find("dlsRowCharge").html().trim();
var lineCount = parseFloat($inputVar.val()) || 0;
var total = Math.abs(lineCount * lineCharge).toFixed(2);
$row.children('.dlsRowTotal').html('$ ' + total);
}