我有一个HTML表单:
<form id="zahlungsvereinbarung-rechnungen">
<input type="checkbox" value="2400" name="rechnungen-pt[]" id="20011" onchange="addRemoveToPT();"><label> Rechnung: 20011 vom 01.02.2016 (Offen: 2.400,00)</label><br> </form>
此表单是动态创建的(有时会有多个条目)。
当我尝试从此输入字段中读取值并使用此脚本将其转换为格式为Money值时:
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
如果输入字段列表只包含一个元素,我只会收到此错误。如果有更多的元素(即使我只检查一个元素)它的工作。
任何想法?
答案 0 :(得分:0)
哦,天哪 - 我发布这个后就找到了解决办法:
我忘记了“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";
}
}