格式化货币无效

Format Money not working

本文关键字:无效 货币 格式化      更新时间:2023-09-26

我有一个HTML表单:

<form id="zahlungsvereinbarung-rechnungen">
                <input type="checkbox" value="2400" name="rechnungen-pt[]" id="20011" onchange="addRemoveToPT();"><label>&nbsp; Rechnung: 20011 vom 01.02.2016 (Offen: 2.400,00)</label><br>                    </form>

此表单是动态创建的(有时不止一个条目)。

当我尝试从这个输入字段中读取值,并用这个脚本将其转换为货币值格式时:

Number.prototype.formatMoney = function(c, d, t){
var n = this, 
    c = isNaN(c = Math.abs(c)) ? 2 : c, 
    d = d == undefined ? "." : d, 
    t = t == undefined ? "," : t, 
    s = n < 0 ? "-" : "", 
    i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", 
    j = (j = i.length) > 3 ? j % 3 : 0;
   return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/('d{3})(?='d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
 };
function addRemoveToPT(re_nr, betrag)
{
//erst machen wir das Fenster zur Zahlungsmodalität wieder unsichtbar
document.getElementById("zahlungsmodalitaet_pt").style.display = "none";
//Jetzt schauen wir uns jede Checkbox an, welchen Wert sie hat
betragOpen = 0;
var elements = document.getElementById("zahlungsvereinbarung-rechnungen").elements["rechnungen-pt[]"];
if(elements.length > 1)
{
	
	for(var i = 0; i < elements.length; i++)
	{
	
		if(elements[i].value > 0 && elements[i].checked)
		{
			
			betragOpen += parseInt(elements[i].value);
			
		}
		
	
	}
	
}else
{
	
	betragOpen = elements.value;
	
}
if(betragOpen > 0)
{
	
	document.getElementById("betrag_pt_gesamt").innerHTML = betragOpen.formatMoney(2, ",", ".");
	document.getElementById("zahlungsmodalitaet_pt").style.display = "block";
	
}else
{
	
	document.getElementById("zahlungskonfiguration").style.display = "none";
	
}
}

我收到错误

betragOpen.formatMoney is not a function

只有当输入字段列表只包含一个元素时,我才会得到这个错误。如果有更多的元素(即使我只检查了一个元素),它就会工作。

有什么想法吗?

天哪,我一发布这篇文章就找到了解决方案:

我忘了"else"部分的parseInt。。。这里是出现问题的函数代码:

function addRemoveToPT(re_nr, betrag)
{
	
	//erst machen wir das Fenster zur Zahlungsmodalität wieder unsichtbar
	document.getElementById("zahlungsmodalitaet_pt").style.display = "none";
	
	//Jetzt schauen wir uns jede Checkbox an, welchen Wert sie hat
	betragOpen = 0;
	var elements = document.getElementById("zahlungsvereinbarung-rechnungen").elements["rechnungen-pt[]"];
	if(elements.length > 1)
	{
		
		for(var i = 0; i < elements.length; i++)
		{
		
			if(elements[i].value > 0 && elements[i].checked)
			{
				
				betragOpen += parseInt(elements[i].value);
				
			}
			
		
		}
		
	}else
	{
		
		betragOpen = parseInt(elements.value);
		
	}
	
	if(betragOpen > 0)
	{
		
		document.getElementById("betrag_pt_gesamt").innerHTML = betragOpen.formatMoney(2, ",", ".");
		document.getElementById("zahlungsmodalitaet_pt").style.display = "block";
		
	}else
	{
		
		document.getElementById("zahlungskonfiguration").style.display = "none";
		
	}
	
}