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

为何jQuery.on("blur", handler())会立即执行处理函数?代码求助

问题分析与解决

你的问题出在事件绑定的写法上:rows.on("blur", OSH.doDivisions(rows)) 这行代码里,OSH.doDivisions(rows)是直接执行了函数,而不是把函数作为事件处理程序传递给on()方法。所以代码执行到这一行时,立刻就弹出alert,同时因为这个函数没有返回值(默认返回undefined),相当于给blur事件绑定了一个无效的处理程序,之后输入框失去焦点时自然不会触发任何操作。

修正后的代码

把事件绑定的部分改成用匿名函数包裹:

OSH.setDivisions = function() {
let rows = $("input[name^='compdiv']");
rows.on("blur", function() {
    OSH.doDivisions(rows);
});
}

OSH.doDivisions = function(rows) {
    alert("in doDivisions()");
    if (OSH.emptyDivisions(rows) == 0) {
        OSH.addDivision();
    }
}

也可以用bind()来绑定参数,写法更简洁:

OSH.setDivisions = function() {
let rows = $("input[name^='compdiv']");
rows.on("blur", OSH.doDivisions.bind(null, rows));
}

OSH.doDivisions = function(rows) {
    alert("in doDivisions()");
    if (OSH.emptyDivisions(rows) == 0) {
        OSH.addDivision();
    }
}

这样修改后,on()方法接收的是一个函数引用,只有当输入框触发blur事件时,才会执行这个函数并调用OSH.doDivisions(rows),就不会出现页面加载就弹窗、后续事件不触发的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:27:41