4

在 CF8 表单中,我使用如下标签:

<cfinput 
    type = "Text" 
    name = "Num" 
    value = "0" 
    validate = "range,integer" 
    range = "0,1000" 
    validateAt="onBlur,onSubmit" 
    required = "yes" 
    message = "Invalid Value" 
>

当字段失去焦点(onBlur)时,输入仅针对 validate 参数中的第一个条件进行验证(当我交换订单时它会改变)。

这是自动生成的 html / JS 代码:

<input 
    name="Num" 
    id="Num"
    type="text" 
    value="0" 
    onblur="if( !_CF_hasValue(this, 'TEXT', false) 
    && 
    !_CF_checkrange(this.value,0.0,1000.0, true) 
    ||
    !_CF_checkinteger(this.value, true) )
    { _CF_onErrorAlert(new Array('Invalid Value')); }" 
/>

OnSubmit 使用单独的自动生成的 JS 处理并且可以正常工作。

难道我做错了什么?CF8 不支持同时验证这两个条件吗?

4

3 回答 3

3

查看此创建的 JavaScript,逻辑中存在错误。

目前,它是:

if (!has_value && !in_range || !is_integer) show_error()

但我认为它真的应该是:

if (!has_value || !in_range || !is_integer) show_error()

由于 JavaScript 会短路逻辑表达式并&&优先于||,因此如果其他两个返回,则原始表达式中的第三个检查永远不会执行true

从它的外观来看,我会暂时说这是一个错误。您是否缺少任何 CF 补丁?也许这已经解决了?

于 2008-12-07T09:09:54.977 回答
0

从生成的 JS 来看,它看起来肯定是在尝试同时满足这两个验证。如果它不起作用,您可能需要在 Firebug 中调试 JS 以查看到底发生了什么。

于 2008-12-07T04:22:54.993 回答
0

如果范围/整数验证不起作用,您可以使用正则表达式进行验证

^1?\d{1,3}$

这意味着“字符串的开头,可选的 1、1-3 位数字,字符串的结尾”。

未经测试,您的里程可能会有所不同。

于 2008-12-07T12:55:57.143 回答