我在尝试使用jQuery formatCurrency库格式化jQuery数据表中的单元格时,出现“SCRIPT438:Object不支持属性或方法'formatCurrency'”“错误。
代码: jQuery DataTable初始化:
var oTable = $('#tblTest').dataTable({
"bFilter": false,
"bInfo": false,
"aoColumns": [{ "bVisible": false }, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
"aaSorting": [[0, 'desc', 1]],
"bScrollInfinite": true, //this property disables pagination
"sScrollY": "230px",
"sScrollX": "940px",
"fnCreatedRow": function (nRow, aData, iDataIndex) {
RefreshGrid();
}
});
function RefreshGrid() {
var nRow = $('#tblTest').dataTable().fnGetNodes();
for (var i = 0; i < nRow.length; i++) {
var Total = (nRow[i].children[6].children[0].innerHTML * nRow[i].children[7].children[0].innerHTML).toFixed(2);
$("input[id$='hfFormat']").val(Total);
var unformatted = $("input[id$='hfFormat']").val();
var formatted = $("input[id$='hfFormat']").val(unformatted).formatCurrency().val();
nRow[i].children[8].children[0].innerHTML = formatted; //Total;
var Veriance = Total - nRow[i].children[11].children[0].value;
nRow[i].children[13].children[0].innerHTML = Veriance.toFixed(2);
nRow[i].children[9].children[0].disabled = true; //CrNo
nRow[i].children[10].children[0].disabled = true; //Allocate
nRow[i].children[11].children[0].disabled = true; //CrAmount
nRow[i].children[14].children[0].disabled = true; //Accept Veriance
nRow[i].children[15].children[0].disabled = true; //Edit
nRow[i].children[10].children[0].checked = false; //Allocate
nRow[i].children[14].children[0].checked = false; //Accept Veriance
nRow[i].children[15].children[0].checked = false; //Edit
nRow[i].style.backgroundColor = "";
if (nRow[i].children[12].children[0].defaultValue == "RejectedReturn") {
nRow[i].style.backgroundColor = "#FFEDE6";
}
else if (nRow[i].children[12].children[0].defaultValue == "CompleteWithVariance") {
nRow[i].children[15].children[0].disabled = false; //Edit
nRow[i].children[14].children[0].checked = true; //Accept Verianc
nRow[i].style.backgroundColor = "#D1D1D1";
}
else if (nRow[i].children[12].children[0].defaultValue == "Complete") {
nRow[i].children[15].children[0].disabled = false; //Edit
nRow[i].children[10].children[0].checked = true; //Allocate
nRow[i].style.backgroundColor = "#D1D1D1";
}
else if (nRow[i].children[12].children[0].defaultValue == "Outstanding") {
nRow[i].children[9].children[0].disabled = false; //CrNo
nRow[i].children[10].children[0].disabled = false; //Allocate
nRow[i].children[11].children[0].disabled = false; //CrAmount
nRow[i].children[14].children[0].disabled = false; //Accept Veriance
}
else if (nRow[i].children[12].children[0].defaultValue == "Partial") {
nRow[i].children[9].children[0].disabled = false; //CrNo
nRow[i].children[10].children[0].disabled = false; //Allocate
nRow[i].children[11].children[0].disabled = false; //CrAmount
nRow[i].children[14].children[0].disabled = false; //Accept Veriance
}
}
}
同样的方法适用于其他网页,但唯一的区别是从fnCreatedRow函数调用RefreshGrid(),而在其他实例中,它是从fnRowCallback和fnFooterCallback函数调用的。 “未格式化”的值将出现在隐藏字段中。
答案 0 :(得分:1)
我对formatCurrency库不熟悉,但看起来你可能试图在这行中的字符串上调用它:
var formattted = $("input[id$='hfFormat']").val(unformatted).formatCurrency().val();
这一行也有一个错字,我认为是一个错误:
var formattted = ...
应该是
var formatted = ...
。
尝试将其更改为:
$("input[id$='hfFormat']").val(unformatted);
$("input[id$='hfFormat']").formatCurrency();
var formatted = $("input[id$='hfFormat']").val();
一般来说,尽管不是必需的,但通常最好不要对方法调用进行链接,因为它更难以阅读,更难调试,更容易出错。
另外,考虑根据函数的使用范围,将重用的jQuery对象(选定元素)设置为函数中的全局变量或本地变量。每次jQuery命中选择器时,它都必须搜索文档以重新找到要添加到对象/集合的元素。这需要很多开销,您可以通过将已经找到的选择器设置为变量来减少开销。使用$(this)
同样如此,因为用$()
包装它使它成为一个jQuery对象,它本质上是一个选择器,使jQuery在文档中搜索匹配{{1}的元素}}。
<强>更新强>
另外,在调用this
之前,请查看this answer,其中演示并解释了调用toNumber
方法(包含在formatCurrency插件中)。我在下面重复了这个例子:
.formatCurrency()
答案 1 :(得分:0)
这是因为val()返回字符串值,但是你应该将输入传递给format function()
//wrong
var formattted = $("input[id$='hfFormat']").val(unformatted).formatCurrency().val();
//right
var input = $("input[id$='hfFormat']");
input.val(unformatted);
var formatted = input.formatCurrency().val();
This fiddle证明我的观点
答案 2 :(得分:0)
检索计算值,将其存储到输入字段,格式化,将其检索回新变量。
var Total = (nRow[i].children[6].children[0].innerHTML * nRow[i].children[7].children[0].innerHTML).toFixed(2);
$("input[id$='hfFormat']").val(Total);
$("input[id$='hfFormat']").formatCurrency();
var formatted = $("input[id$='hfFormat']").val();
答案 3 :(得分:0)
原来问题在于重复的jquery库脚本:在页面上和页面上的用户控件。我将脚本引用移动到主页面并从子页面和控件中删除以避免重复。 谢谢你的帮助!