如何获取两个校验函数的True结果并在第三个函数中使用?代码调试求助
问题分析与修复方案
我来帮你搞定这个问题!核心问题在于你之前的apple和banana并不是独立可调用的函数——它们只是绑定在特定事件上的处理程序而已,直接在第三个函数里调用apple()和banana()根本找不到对应的函数,而且事件处理函数的返回值也不会被外部捕获,这就是第三个函数失效的原因。
下面是具体的修复方案,我会把校验逻辑抽成独立的可复用函数,让代码既清晰又能实现你想要的功能:
修复后的完整代码
JavaScript 部分
$(function() { // 独立的日期校验函数,返回布尔值表示校验结果 function validateDates() { var dateA = $('#startdate').val(); var dateB = $('#enddate').val(); const isValid = dateA.length && dateB.length && dateA === dateB; if (isValid) { alert("Apple"); } return isValid; } // 独立的时间校验函数,返回布尔值表示校验结果 function validateTimes() { var timeA = $('#starttime').val(); var timeB = $('#endtime').val(); const isValid = timeA.length && timeB.length && timeA >= timeB; if (isValid) { alert("Banana"); } return isValid; } // 日期输入变化时触发校验 $("#startdate, #enddate").on("change.apple", validateDates); // 时间输入变化时触发校验 $("#starttime, #endtime").on("change.banana", validateTimes); // 所有输入变化时判断两个校验是否都通过 $("#startdate, #enddate, #starttime, #endtime").change(function() { if (validateDates() && validateTimes()) { alert("Hello"); } else { alert("Goodbye"); } }); });
HTML 部分(修复了标签闭合问题)
<form> <fieldset> <ul> <li> <p><input type="text" id="startdate"></p> </li> <li> <p><input type="text" id="starttime"></p> </li> <li> <p><input type="text" id="enddate"></p> </li> <li> <p><input type="text" id="endtime"></p> </li> </ul> </fieldset> </form>
关键改动说明
- 抽离独立校验函数:把日期和时间的校验逻辑分别放到
validateDates()和validateTimes()里,这两个函数直接返回校验结果的布尔值,方便在任何场景下调用。 - 简化事件绑定:原来的事件处理程序直接绑定到这些独立函数上,避免重复编写相同逻辑。
- 修复HTML标签问题:你原来的
#starttime和#enddate输入标签没有闭合(缺少>),这可能导致浏览器解析异常,已经帮你修复。 - 全局判断逻辑:第三个监听函数现在直接调用两个校验函数,通过它们的返回值判断是否满足条件,这样就能正常触发对应的提示了。
这样修改后,你的「条件为真时执行操作」的功能就能正常工作啦!
内容的提问来源于stack exchange,提问作者kejo
相关产品推荐
相关产品推荐

