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

jQuery动态生成button的onclick属性失效 页面加载时函数自动触发问题

问题产生原因

两个异常的根本原因是onclick属性的赋值逻辑错误:

  • 代码中'onclick': select($i)的写法会在赋值时直接执行select($i)获取返回值,而非将函数作为事件处理程序绑定。因此遍历学生数据时select函数会被循环调用,导致页面加载阶段就打印出对应日志。
  • 自定义的select函数没有返回值,执行后返回undefined,相当于给onclick属性赋值了空值,因此最终生成的按钮元素上看不到onclick属性。

修复方案

方案1:内联事件快速修复

把select($i)改为字符串拼接形式,避免赋值阶段直接执行函数:

$.get($querystudent, function(response)
    {
        tbodystudent.empty();
        console.log("Table TBODY Cleared!");
        var students = response.result;
        var $i = 0
        $.each(students, function(_,student)
        {
            $i = student.ID
            tbodystudent.append(
                $("<tr>").append(
                    $("<td>").text(student.FirstName),
                    $("<td>").text(student.MiddleName),
                    $("<td>").text(student.LastName),
                    $("<td>").text(student.CourseID),
                    $("<td>").text(student.YearLevel),
                    $("<input>").attr({
                        'type':'button',
                        'class':'button is-primary is-small',
                        'id':$i, 
                        'onclick': 'select(' + $i + ')' // 改为字符串形式的函数调用
                    }).val("Select")          
                ),
            );
        });
    }, "json");

方案2:jQuery事件绑定(更推荐)

不使用内联onclick属性,改用jQuery的on方法绑定事件,避免闭包问题同时代码可维护性更强:

$.get($querystudent, function(response)
    {
        tbodystudent.empty();
        console.log("Table TBODY Cleared!");
        var students = response.result;
        $.each(students, function(_,student)
        {
            tbodystudent.append(
                $("<tr>").append(
                    $("<td>").text(student.FirstName),
                    $("<td>").text(student.MiddleName),
                    $("<td>").text(student.LastName),
                    $("<td>").text(student.CourseID),
                    $("<td>").text(student.YearLevel),
                    $("<input>").attr({
                        'type':'button',
                        'class':'button is-primary is-small'
                    }).data('student-id', student.ID) // 用data属性存储ID更稳妥
                    .val("Select")
                    .on('click', function() {
                      select($(this).data('student-id'))
                    })       
                ),
            );
        });
    }, "json");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:39:03