jQuery input[type=text]校验异常:含stopImmediatePropagation()时功能不符
问题排查与解决方向
核心问题拆解
你当前的代码存在两个关键问题:
- 全局选择器
$(".text-input")会选中页面所有同类输入框,无法精准定位当前点击的OE列对应的输入框,导致判断逻辑失效。 - 无论输入框是否有内容,都调用了
e.stopImmediatePropagation(),直接阻断了所有后续事件(包括题型默认的正常跳转逻辑),这就是有内容时仍触发提示的原因。
修正后的代码示例
$(".sq-cardsort-bucket-c5").on("click", function(e) { // 获取当前点击容器内的文本输入框,避免全局匹配 const currentInput = $(this).find(".text-input"); const hasContent = currentInput.val().trim().length > 0; if (!hasContent) { // 无内容时,阻止默认的自动跳行行为,允许用户输入或选择其他列 e.stopImmediatePropagation(); e.preventDefault(); setTimeout(dynamicOE, 750); } // 有内容时,不做任何阻止,让题型默认的后续逻辑正常执行 });
关键优化点说明
- 精准定位输入框:用
$(this).find(".text-input")替代全局选择器,确保只判断当前点击的OE列对应的输入框内容。 - 条件化阻止事件:仅在输入框为空时调用
stopImmediatePropagation()和preventDefault(),有内容时完全放行,让题型的默认跳转逻辑正常触发。 - 优化内容判断:加入
trim()处理空白字符,避免用户输入空格被误判为有内容。
额外排查建议
- 检查
dynamicOE函数是否存在逻辑冲突,比如是否在无内容时强制触发了选择列的提示。 - 确认题型默认的事件绑定顺序,如果你的事件绑定在默认事件之后,
stopImmediatePropagation()可能无法生效,可以尝试用$(document).on("click", ".sq-cardsort-bucket-c5", function(e) { ... })的委托方式绑定,确保事件优先触发。
内容的提问来源于stack exchange,提问作者bp13
相关产品推荐
相关产品推荐

