You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为动态生成的文本框应用jQuery blur事件实现对应等级自动填充

解决动态生成成绩输入框的Blur事件与对应等级填充问题

原代码的核心问题是jQuery选择器无法匹配动态生成的marks_1、marks_2这类带编号的输入框,且未关联对应科目的grades_x输入框,导致事件无法触发或填充错误。以下是具体修改方案:


一、修改jQuery事件绑定逻辑

直接替换原jQuery代码,解决事件匹配与对应等级框关联问题:

// 匹配所有ID以marks_开头的输入框,绑定blur事件
$(document).on('blur', 'input[id^="marks_"]', function(){
    // 获取当前输入框的编号后缀(比如marks_1的后缀是1)
    var suffix = $(this).attr('id').split('_')[1];
    // 获取当前成绩值与对应科目总分
    var marksVal = $(this).val();
    var totMarksVal = $(this).closest('tr').find('input[name="totmarks[]"]').val();

    // 空值校验,避免无效请求
    if(marksVal && totMarksVal){
        $.ajax({
            url: "getgrade.php",
            type: "POST",
            // 传递成绩和总分(需与getgrade.php的参数要求匹配)
            data: {
                marks: marksVal,
                totmarks: totMarksVal
            },
            dataType: "json",
            cache: false,
            success: function(data){
                // 填充对应编号的等级输入框
                $('#grades_' + suffix).val(data[0]);
            }
        });
    }
});

修改说明:

  • 用input[id^="marks_"]属性选择器,匹配所有动态生成的成绩输入框,解决事件绑定失效问题
  • 通过拆分ID获取编号后缀,精准定位对应科目的等级输入框,确保填充到正确位置
  • 增加总分参数传递(等级计算通常依赖总分),并添加空值校验避免无效AJAX请求

二、可选:用类名简化选择器(更健壮的方案)

如果不想依赖ID后缀,可修改PHP代码给输入框添加统一类名,通过DOM结构关系关联元素:

修改后的PHP代码片段:

<?php
$c=1;
while($row = mysqli_fetch_row($result))
{ 
    echo htmlentities($row[1]); ?>
    <table border="1">
        <tr>
            <th>Total Marks</th>
            <th>Obtained</th>
            <th>Grade</th>
        </tr>
        <tr>
            <td><input type="number" name="totmarks[]" value="" class="totmarks-input"></td>
            <td><input type="number" name="marks[]" value="" id="marks_<?php echo $c; ?>" class="marks-input"></td>
            <td><input type="text" name="grades[]" value="" id="grades_<?php echo $c; ?>" class="grades-input"></td>
        </tr>
    </table>
<?php
$c++;
}
?>

对应简化的jQuery代码:

$(document).on('blur', '.marks-input', function(){
    var $currentRow = $(this).closest('tr');
    var marksVal = $(this).val();
    var totMarksVal = $currentRow.find('.totmarks-input').val();
    var $gradeInput = $currentRow.find('.grades-input');

    if(marksVal && totMarksVal){
        $.ajax({
            url: "getgrade.php",
            type: "POST",
            data: {
                marks: marksVal,
                totmarks: totMarksVal
            },
            dataType: "json",
            cache: false,
            success: function(data){
                $gradeInput.val(data[0]);
            }
        });
    }
});

这种方式通过DOM层级关系查找对应元素,不依赖ID命名规则,代码更灵活,后期修改HTML结构时不易出错。


三、后端代码适配

确保getgrade.php能正确接收前端传递的参数并返回JSON格式数据,示例逻辑:

<?php
// 假设已完成数据库连接等前置操作
$marks = $_POST['marks'];
$totmarks = $_POST['totmarks'];

// 示例等级计算逻辑,可根据实际需求调整
$percentage = ($marks / $totmarks) * 100;
if($percentage >= 90) $grade = 'A+';
else if($percentage >= 80) $grade = 'A';
else if($percentage >= 70) $grade = 'B';
else $grade = 'C';

// 返回JSON格式结果
echo json_encode([$grade]);
?>

内容的提问来源于stack exchange,提问作者Sikander Shahzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:27:20