jQuery错误“无法读取未定义的属性'调用'

时间:2016-10-20 10:14:07

标签: javascript jquery

我是一名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);
    }
}

我知道这些功能通常都是内联的;我宁愿单独定义它们并调用它们,除非那是不可能的。

1 个答案:

答案 0 :(得分:4)

这里有一些问题:

  • each()需要处理函数,这是导致错误的原因。也就是说,在这种情况下不需要它。
  • 自jQuery 1.7以来,您应该使用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);
}