简体   繁体   中英

Cannot fetch values from dynamically created textboxes in javascript

FORM SNAPSHOT 2 PHP code for creating textboxes dynamically

for($i=0;$i<count($chkSelec);$i++)
            {
                echo "<td align='center'><input type='text' id='".$columnValue[$i]."' name='".$columnValue[$i]."[]' size='5' onchange=AddToAggr('".$columnValue[$i]."',".$count_var.") required /></td>";   
            }

echo "<td align='center'><input type='text' id='Aggr' name='Aggr[]' size='7' value='".$rowText['TotalGrade']."' readonly='readonly' disabled/></td>";

This is my javascript function

var i=0;
var TotalGrade=0;
function AddToAggr(val,countvar) {
    var group6 = document.PIScoreForm.Aggr;
    for(var i=0;i<2;i++)
    {
        for(var j=i;j<countvar;j++)
        {
            if(val=='Comm')
            {       
                var group1 = document.PIScoreForm.Comm;
                 TotalGrade += parseFloat(group1[i].value);
            }
            else if(val=='PresSkil')    
            {
                var group2 = document.PIScoreForm.PresSkil;
                TotalGrade += parseFloat(group2[i].value);
                alert('2 :'+TotalGrade);
            }
            else
            {
                    TotalGrade += 0;
            }
        }   
        document.getElementsByName("Aggr")[i].value = TotalGrade;
        alert("Total " + i+" "+TotalGrade); 
    }
}

I want to find average of each column and display it in Aggr textbox. in first for loop ,the condition i<2 is number of Panalist. I hard-coded the value for time-being.

For starters the document.getElementsByName call should accept ' Aggr[] ' and not 'Aggr' that will remove the "not an object" errors being throw on the console.

Without having additional context there may be additional changes required, here's that fix applied to what you've provided.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP code for creating textboxes dynamically</title>
</head>
<body>

<?php
// Mock Data
$rowText = array (
    'TotalGrade' => 0
);
$columnValue = array();
for($i=0;$i<5;$i++)
{
    $columnValue[$i] = "testValue";
    echo "<td align='center'><input type='text' id='".$columnValue[$i]."' name='".$columnValue[$i]."[]' size='5' onchange=AddToAggr('".$columnValue[$i]."',".$i.") required /></td>";
}

echo "<td align='center'><input type='text' id='Aggr' name='Aggr[]' size='7' value='".$rowText['TotalGrade']."' readonly='readonly' disabled/></td>";

?>

<script>
    var i=0;
    var TotalGrade=0;
    function AddToAggr(val,countvar) {
        //var group6 = document.PIScoreForm.Aggr;
        for(var i=0;i<2;i++)
        {
            for(var j=i;j<countvar;j++)
            {
                if(val=='Comm')
                {
                    var group1 = document.PIScoreForm.Comm;
                    TotalGrade += parseFloat(group1[i].value);
                }
                else if(val=='PresSkil')
                {
                    var group2 = document.PIScoreForm.PresSkil;
                    TotalGrade += parseFloat(group2[i].value);
                    alert('2 :'+TotalGrade);
                }
                else
                {
                    TotalGrade += 0;
                }
            }
            document.getElementsByName("Aggr[]")[i].value = TotalGrade;
            alert("Total " + i+" "+TotalGrade);
        }
    }
</script>

</body>
</html>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM