JQuery 验证 <选择> min取决于其他字段,不起作用

JQuery Validation <select> min depends on other field, not working

本文关键字:字段 其他 不起作用 取决于 验证 选择 JQuery min      更新时间:2023-09-26

我有一个选择"欠费LHOLocation",它有一个选项"未选择",值为-1,所有其他可选值都大于0。

这是我的javascript中定义的规则

    $("#ArrearsLHOLocation").rules("add", {
        min: {
            depends: function (elem) {
                return $("#rbArrearsLHO[value='True']").is(":checked") ? 0 : -1;
            }
        },
        messages: {
            min: "You have stated that the applicant/coapplicant have LHO arrears but you have not stated where!"
        }
    });

以下是在Chrome中观察到的手表。

 $("#rbArrearsLHO[value='True']").is(":checked") ? 0 : -1: 0
 $("#rbArrearsLHO[value='True']").is(":checked"): true
 $("#ArrearsLHOLocation").val(): "-1"
 $("#ArrearsLHOLocation").val() >=($("#rbArrearsLHO[value='True']").is(":checked") ? 0 : -1): false

此页面已成功提交,但不正确。 如果我切换单选按钮,手表如下所示:

 $("#rbArrearsLHO[value='True']").is(":checked") ? 0 : -1: -1
 $("#rbArrearsLHO[value='True']").is(":checked"): false
 $("#ArrearsLHOLocation").val(): "-1"
 $("#ArrearsLHOLocation").val() >=($("#rbArrearsLHO[value='True']").is(":checked") ? 0 : -1): true

此页面已停止提交,并显示我的错误消息。

我做错了什么?

史蒂夫

-

-根据请求的HTML片段--

<td>Do they have arrears?</td><td>
Yes <input id="rbArrearsLHO" name="rbArrearsLHO" type="radio" value="True" />
No <input checked="checked" id="rbArrearsLHO" name="rbArrearsLHO" type="radio" value="False" />
</td>
</tr>
<tr>
 <td colspan="2">
   <blockquote>
    If YES, Where? 
       <select data-val="true" data-val-number="The field ArrearsLHOLocation must be a number." id="ArrearsLHOLocation" name="ArrearsLHOLocation">
            <option value="-1">None Selected</option>
            <option value="4">Location 1</option>
            <option value="6">Location 2</option>
            <option value="5">Location 3</option>
            <option value="7">Location 4</option>
       </select>
   </blockquote>
 </td>
</tr>

select只能required或不。 我从未见过在select上使用min规则来强制用户选择一个选项。

您的"None Selected"选项应包含value="",然后当您对此声明required规则时,用户将被迫选择除"None Selected"以外的任何选项。

<select name="list">
    <option value="">None Selected</option>
    <option value="1">option 1</option>
    <option value="2">option 2</option>
    <option value="3">option 3</option>
</select>

然后,您的 depends 参数只需要返回一个布尔值来说明用户是否需要选择一个选项。

$('[name="list"]').rules("add", {
    required: {
        depends: function (elem) {
            return $("#check").is(":checked");
        }
    },
    messages: {
        required: "Select from the list"
    }
});

演示:http://jsfiddle.net/7k2zg7rv/


编辑:

由于您希望将第一个option保留为value="-1",因此您需要使用addMethod()方法创建自定义规则/方法,该方法将第一个option识别为无效。

$.validator.addMethod('select', function(value, element) {
    return (value == -1) ? false : true;
});

更新的演示:http://jsfiddle.net/7k2zg7rv/2/

查看jquery.valid,我发现依赖应该只计算为真/假。 所以修改最小值为具有 [param : 0],当我需要它时,这将是最小值。 然后,当最小值应该有效时,将依赖值更改为 true 可以解决此问题。

$("#ArrearsLHOLocation").rules("add", {
        min: {
            param: 0,
            depends: function (elem) {
                return $("#rbArrearsLHO[value='True']").is(":checked");
            }
        },
        messages: {
            min: "You have stated that the applicant/coapplicant have LHO arrears but you have not stated where!"
        }
    });

演示:小提琴(从@Sparky以前的小提琴分叉而来)