JavaScript alert无法输出Telerik RadDatePicker字符串及空值问题
问题原因与代码疏漏
你的代码存在两处核心问题,才会出现合法日期能弹出值、非法输入/空值无内容的现象:
- 选择器写法错误。你写的
$('<%= RadDatePicker1.ClientID %>')缺少ID选择器必需的#前缀,jQuery并没有准确选中目标DOM元素。之所以输入合法日期时能弹出值,只是Telerik控件的客户端逻辑在输入合法时,会临时给匹配到的对象挂载value属性,属于巧合;一旦输入非法或者留空,控件不会执行这个同步逻辑,自然读不到任何值。 - 取值逻辑不符合RadDatePicker的设计规则。RadDatePicker不是普通的input输入框,它内部自带输入预校验逻辑:只有输入内容能被成功解析为合法日期时,才会把解析后的值同步到底层DOM的value属性上;空输入、非法输入状态下,DOM的value属性本身就是空值,再加上你本身元素选择就不对,读到的是undefined,alert弹出undefined时自然不会显示有效内容。
修正后的实现代码
优先使用Telerik官方提供的客户端API取值,不要直接读DOM属性,兼容性和准确性最高:
function validateDates() { // 通过官方$find方法获取RadDatePicker的客户端实例,这是最稳定的获取方式 var datePicker = $find('<%= RadDatePicker1.ClientID %>'); // 如需读取用户输入的原始内容(不管是否合法),从控件关联的输入框取 var rawInput = datePicker.get_textBox().value; alert("用户原始输入内容:" + rawInput); // 直接获取控件解析后的日期对象,解析失败(非法/空值)时会返回null var validDate = datePicker.get_selectedDate(); if (!validDate) { alert("请输入合法日期,空值或格式错误的内容不允许提交"); return false; } // 所有校验通过后再放行提交 return true; }
补充说明:不要试图通过普通DOM的value属性做RadDatePicker的校验,控件本身的解析逻辑不会把无效输入同步到DOM属性上,这是你之前遇到异常的核心诱因。直接用
get_selectedDate()方法判断返回值是否为null,就能准确识别输入是否合法。
内容的提问来源于stack exchange,提问作者gene
相关产品推荐
相关产品推荐

