Javascript动态Fieldset和总和

时间:2011-11-19 14:06:19

标签: javascript

我正在使用一个脚本,为我的表单添加一个字段集,但我有一个我无法弄清楚的故障,并会感谢你能提供的任何见解。

这是麻烦:
字段集的重复效果很好。

我有另一个脚本,它在原始字段集中创建名为“unitPrice”的字段的总和。当我使用新的unitPrice字段添加新的字段集时,不会计算总和。我确信它们正在重命名,但我会使用什么名称,如何将其写入计算中,以便我总共拥有所有unitPrice字段?

谢谢你的帮助。

这是Fieldset脚本:

<script>

function insertAfter(newElement, targetElement)

{
var parent = targetElement.parentNode;
if (parent.lastChild == targetElement)
{
    parent.appendChild(newElement);
}
else
{
    parent.insertBefore(newElement, targetElement.nextSibling);
}
}


// Suffix + Counter
var suffix = ':';
var counter = 1;


// Clone nearest parent fieldset
function cloneMe(a)
{
// Increment counter
counter++;

// Find nearest parent fieldset
var original = a.parentNode;
while (original.nodeName.toLowerCase() != 'fieldset')
{
    original = original.parentNode;
}
var duplicate = original.cloneNode(true);

// Label - For and ID
var newLabel = duplicate.getElementsByTagName('label');
for (var i = 0; i < newLabel.length; i++)
{
    var labelFor = newLabel[i].htmlFor
    if (labelFor)
    {
        oldFor = labelFor.indexOf(suffix) == -1 ? labelFor : labelFor.substring(0, labelFor.indexOf(suffix));
        newLabel[i].htmlFor = oldFor + suffix + counter;
    }
    var labelId = newLabel[i].id
    if (labelId)
    {
        oldId = labelId.indexOf(suffix) == -1 ? labelId : labelId.substring(0, labelId.indexOf(suffix));
        newLabel[i].id = oldId + suffix + counter;
    }
}

// Input - Name + ID
var newInput = duplicate.getElementsByTagName('input');
for (var i = 0; i < newInput.length; i++)
{
    var inputName = newInput[i].name
    if (inputName)
    {
        oldName = inputName.indexOf(suffix) == -1 ? inputName : inputName.substring(0, inputName.indexOf(suffix));
        newInput[i].name = oldName + suffix + counter;
    }
    var inputId = newInput[i].id
    if (inputId)
    {
        oldId = inputId.indexOf(suffix) == -1 ? inputId : inputId.substring(0, inputId.indexOf(suffix));
        newInput[i].id = oldId + suffix + counter;
    }
}

// Select - Name + ID
var newSelect = duplicate.getElementsByTagName('select');
for (var i = 0; i < newSelect.length; i++)
{
    var selectName = newSelect[i].name
    if (selectName)
    {
        oldName = selectName.indexOf(suffix) == -1 ? selectName : selectName.substring(0, selectName.indexOf(suffix));
        newSelect[i].name = oldName + suffix + counter;
    }
    var selectId = newSelect[i].id
    if (selectId)
    {
        oldId = selectId.indexOf(suffix) == -1 ? selectId : selectId.substring(0, selectId.indexOf(suffix));
        newSelect[i].id = oldId + suffix + counter;
    }
}

// Textarea - Name + ID
var newTextarea = duplicate.getElementsByTagName('textarea');
for (var i = 0; i < newTextarea.length; i++)
{
    var textareaName = newTextarea[i].name
    if (textareaName)
    {
        oldName = textareaName.indexOf(suffix) == -1 ? textareaName : textareaName.substring(0, textareaName.indexOf(suffix));
        newTextarea[i].name = oldName + suffix + counter;
    }
    var textareaId = newTextarea[i].id
    if (textareaId)
    {
        oldId = textareaId.indexOf(suffix) == -1 ? textareaId : textareaId.substring(0, textareaId.indexOf(suffix));
        newTextarea[i].id = oldId + suffix + counter;
    }
}

duplicate.className = 'duplicate';
insertAfter(duplicate, original);
}


// Delete nearest parent fieldset
function deleteMe(a)
{
var duplicate = a.parentNode;
while (duplicate.nodeName.toLowerCase() != 'fieldset')
{
    duplicate = duplicate.parentNode;
}
duplicate.parentNode.removeChild(duplicate);
}
 </script>

以下是我用于计算的脚本:

<script type="text/javascript">
function myFunction(){
var the_fields = document.getElementsByName("unitPrice");
var the_sum = 0;
for (var i=0; i<the_fields.length; i++){
    if (the_fields[i].value != ""
    && !isNaN(the_fields[i].value))
    {
        the_sum += Number(the_fields[i].value);
    }
}
document.repairform.sum.value = (the_sum.toFixed(2));

}
</script>

1 个答案:

答案 0 :(得分:0)

我想每次添加新字段时都需要调用“myfunction”。 当有人加载您的页面时,“myfunction”会计算当前“现有”字段的总和。复制字段时,需要重新调用“myfunction”,以便根据新的重复字段更新总和。