2011-11-19 43 views
0

我正在使用一个脚本,将字段集添加到我的表单中,但我遇到了一个我无法弄清楚的小故障,并且非常感谢您提供的任何洞察。

这是麻烦:
现场组的重复效果很好。Javascript动态Fieldset和总和

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

感谢您的帮助。

这里是字段集的脚本:

<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> 

这里是我使用的计算脚本:我想,你需要调用“myfunction的”每次

<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> 

回答

0

一个新的领域正在增加。 当有人加载你的页面时,“myfunction”会计算当前“现有”字段的总和。当您复制字段时,您需要重新调用“myfunction”,以便根据新的重复字段更新总和。