Javascript代码在没有服务器的情况下运行,但在服务器上运行时不能(部分)运行?

时间:2016-06-20 07:16:55

标签: html http server

我有一个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

2 个答案:

答案 0 :(得分:0)

它适用于Apache Web服务器。但是,我发现HTML和Javascript中的几个问题可能会导致问题:

  1. 您有两个ID为“invoice1”的元素。这可能是罪魁祸首,因为那是你的Javascript实际上试图写的标签。
  2. 在第57行,你应该在类和href之间加一个空格。 <a style="float:right; position:absolute; right:25%;" class='no-print'href="javascript:void(0)" onclick="closeNav()">。第142行还有类似的内容。
  3. 第89行:你正在关闭一个从未打开的东西。
  4. 从第157行开始的一堆关闭标记,从div标记中的语法错误开始。
  5. 或许给自己一个Firebug的速成课程,因为这往往会为你找到许多这些问题。

答案 1 :(得分:0)

您更新了函数a中的局部变量updateInvoice()。这也是在script.js中第242行定义的全局变量的名称,并在函数inWords()中引用。这会给你带来麻烦。我会在第242和254行重命名全局