我有一个Javascript代码,可以将数字转换为数字名称(例如120到一百二十)。
当我打开网页并尝试在本地使用它时,它按预期工作(屏幕截图如下)。
但是当我在任何服务器(http服务器,如Wamp或mangoose或github.io)上运行它时,结果不符合预期。它在两者之间插入“undefined”一词。
Screenshot when running locally
您可以在https://github.com/saurabhshri/pathology
看到代码javascript代码位于script.js中,而在index.html中调用
EDIT1:显然我不能发布多个链接。所以我只附加了我的github链接,在那里你可以看到整个代码并自己尝试。
EDIT2:这是负责转换的js代码:
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
function inWords (num) {
if ((num = num.toString()).length > 9) return 'overflow';
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
if (!n) return; var str = '';
str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : '';
str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : '';
str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : '';
str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : '';
str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only ' : '';
return str;
}
以下是调用上述js代码的时间(最后一行):
/* Update Invoice
/* ========================================================================== */
function updateInvoice() {
var total = 0;
var cells, price, total, a, i;
// update inventory cells
// ======================
for (var a = document.querySelectorAll('table.inventory tbody tr'), i = 0; a[i]; ++i) {
// get inventory row cells
cells = a[i].querySelectorAll('span:last-child');
// set price as cell[2] * cell[3]
price = parseFloatHTML(cells[2]);// * parseFloatHTML(cells[3]);
// add price to total
total += price;
// set row total
cells[4].innerHTML = price;
}
// update balance cells
// ====================
// get balance cells
cells = document.querySelectorAll('table.balance td:last-child span:last-child');
// set total
cells[0].innerHTML = total;
// set balance and meta balance
cells[2].innerHTML = document.querySelector('table.meta tr:last-child td:last-child span:last-child').innerHTML = parsePrice(total - parseFloatHTML(cells[1]));
// update prefix formatting
// ========================
var prefix = document.querySelector('#prefix').innerHTML;
for (a = document.querySelectorAll('[data-prefix]'), i = 0; a[i]; ++i) a[i].innerHTML = prefix;
// update price formatting
// =======================
for (a = document.querySelectorAll('span[data-prefix] + span'), i = 0; a[i]; ++i) if (document.activeElement != a[i]) a[i].innerHTML = parsePrice(parseFloatHTML(a[i]));
document.getElementById("bwords").innerHTML = inWords (total);
}
以下是显示结果的html代码:
<span style="font-size: 80%;">Amount in words : Rupees </span><span style="text-transform: capitalize;" style="font-size: 80%;"id="bwords"></span>
EDIT3:代码部分在服务器上工作,即250
所需的输出:仅二百五十
Obtenined output:Twenty Undefinedhundred and five 5only
答案 0 :(得分:0)
它适用于Apache Web服务器。但是,我发现HTML和Javascript中的几个问题可能会导致问题:
<a style="float:right; position:absolute; right:25%;" class='no-print'href="javascript:void(0)" onclick="closeNav()">
。第142行还有类似的内容。或许给自己一个Firebug的速成课程,因为这往往会为你找到许多这些问题。
答案 1 :(得分:0)
您更新了函数a
中的局部变量updateInvoice()
。这也是在script.js中第242行定义的全局变量的名称,并在函数inWords()
中引用。这会给你带来麻烦。我会在第242和254行重命名全局