
在 ASP.NET Core 视图中使用 radio 控件动态控制日期输入框()的显隐时,仅调用 .show() 或移除 hidden 属性无效;关键在于当从 type="hidden" 切换回可见状态时,必须将其 type 显式设为 "text"(或空字符串),否则浏览器仍按隐藏字段渲染。
在 asp.net core 视图中使用 radio 控件动态控制日期输入框(``)的显隐时,仅调用 `.show()` 或移除 `hidden` 属性无效;关键在于当从 `type="hidden"` 切换回可见状态时,必须将其 `type` 显式设为 `"text"`(或空字符串),否则浏览器仍按隐藏字段渲染。
在你的代码中,服务端通过 @if 条件为 FruitDate 输入框设置了初始 type="hidden"(All 选中时)或默认类型(Red 选中时)。但 jQuery 运行时,该元素始终存在于 DOM 中——且其初始 type 很可能已被服务端渲染为 "hidden"。此时,即使你调用 $('#FruitDate').show() 或 removeAttr('hidden'),浏览器对 <input type="hidden"> 元素根本不渲染视觉内容,.show() 对其完全无效(它不是 CSS display: none,而是语义级隐藏)。
✅ 正确做法是:在“显示”逻辑中,不仅需恢复可见性,更要将 type 属性重置为可编辑的类型(如 "text"),并确保样式正常:
$(document).on("change", "input[type=radio][name=FruitsIncluded]", function() {
const selectedValue = this.value;
if (selectedValue === "Red") {
// 1. 将 type 改为 text(关键!)
$('#FruitDate').attr('type', 'text');
// 2. 确保显示(对 type=text 有效)
$('#FruitDate').show();
// 3. 可选:聚焦或触发日期插件初始化(如使用 flatpickr、bootstrap-datepicker)
$('#FruitDate').focus();
} else {
// All 选中:隐藏并清空
$('#FruitDate').hide();
$('#FruitDate').val('');
// 注意:此处无需改 type="hidden" —— 但若后续需提交,保持 type="hidden" 可避免意外提交空值
// 若服务端依赖 type="hidden" 行为,可保留;否则建议统一用 CSS 隐藏 + disabled,更可控
}
});
⚠️ 注意事项:
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
- 不要混用
type="hidden"和.show()/.hide():<input type="hidden">是不可见且不可交互的 HTML 原生行为,CSS 显示无效; - 若你使用了日期选择插件(如
date-mask类暗示的输入掩码或日历控件),请确保在type切换后重新初始化插件,否则功能可能失效; - 更健壮的替代方案:服务端始终渲染一个
type="text"的输入框,并用 CSS 控制显隐(如style="display:none"),再配合disabled属性防止误操作,这样 jQuery 操作更稳定; - 使用严格相等
===替代==,避免类型转换引发意外。
总结:动态切换表单控件可见性时,语义类型(type)优先于样式控制。对 <input> 元素,“显示” ≠ “取消隐藏”,而是“恢复为可渲染类型 + 启用视觉表现”。










