如何为Razor的EditorFor日期字段设置onchange事件?
嘿,我碰到过一模一样的问题!Razor的EditorFor生成的原生日期输入框,手动改值能触发change,但点日历选日期就没反应——这是因为不少浏览器的原生日期选择器在通过面板选值时,不会立刻触发标准的change事件,得等输入框失去焦点才会触发。给你几个靠谱的解决办法:
1. 同时监听input和change事件
input事件会在输入框的值任何变化时触发,包括通过日历面板选择日期的情况,完美覆盖手动输入和日历选择两种场景。代码这么写:
$("#AvailableEndDateTimeUtc").on("input change", function () { alert("ok"); // 这里写你的业务逻辑 });
这样不管是手动敲键盘改日期,还是点日历选日期,都能触发你的回调函数。change事件可以作为补充,处理一些手动输入后失去焦点的场景(虽然input也能覆盖,但多监听一个没坏处)。
2. 确认控件ID的正确性(排查小坑)
虽然你说手动修改有效,但还是提一句:如果你的EditorFor是在嵌套模型、局部视图或者表单里,Razor可能会自动给ID加前缀(比如Model_AvailableEndDateTimeUtc)。可以打开浏览器开发者工具(F12),查看生成的输入框的实际ID,确保jQuery选择器里的ID和实际一致。
3. 针对第三方日期插件的特殊处理(如果用到的话)
如果你后来换成了第三方日期插件(比如jQuery UI Datepicker),那得监听插件自带的事件,比如onSelect:
$("#AvailableEndDateTimeUtc").datepicker({ onSelect: function(dateText) { alert("ok"); // 你的逻辑 } });
不过看你的描述,应该是用的原生HTML5日期输入框,所以第一个方案就足够了。
内容的提问来源于stack exchange,提问作者Pierre-Adrien Maison
相关产品推荐
相关产品推荐

