使用Depends和Param属性进行Jquery自定义规则验证

时间:2012-03-26 17:09:06

标签: javascript jquery html jquery-validate

所以我有一个带有4个值A,B,C和D的html下拉框.4个预填充的文本框(P1,P2,P3,P4),其中包含一些文本,以及4个空白文本框( B1,B2,B3和B4)。

我希望根据下拉框中选择的值来应用验证。

如果下拉值为A,我只想检查空白文本框B1中的值是否不等于预填充文本框P1中的值,并且B1也不能保留为空白。

相同的下拉框值与B - > P2.val!= B2.val,B2不应为空。同样适用于其他。

我想出了一个文本框的方法,但它不能以某种方式工作,不确定是什么问题。希望能解决我的问题。

以下代码段的预期结果是,当dropdownbox中有值A时,它应该继续检查两个文本框中的值是否相同,即在P1和B1中。 !!

HTML

<form>
    <select class="inlineEdit" name="Dropdownbox" id="Dropdownbox">
    <option value="A">
        A
    </option><option value="B">
        B
    </option><option value="C">
        C
    </option><option value="D">
        D
    </option>
</select>
    <br/><br/>
    <input type="text"  name="P1" value="Old Value" />
    <br/><br/>
    <input type="text"  name="B1" />
    <button type="submit">Test</button>
</form>​​​​​​​​​​​

JQuery的

jQuery.validator.addMethod("change", function(value, element, param) {
alert(param + " " + value);
    return this.optional(element) || value != param;
}, jQuery.format("You must enter {0}"));


$("form").validate({
    rules: {
        B1: {
            required: function(element) {
                return $("#Dropdownbox").val() == "A";
            },
            change: {
                param: $("#P1").val(),
                depends: function(element) {
                    return $("#Dropdownbox").val() == "A";
                }
            }
        }
    },

    debug: true
});​

........

可以尝试在以下位置运行上述代码:http://jsfiddle.net/

问题是$(“#P1”)。val正在发送true,而不是param中的实际值,这就是它无法正常工作的原因。如果我硬编码param中的值,代码工作正常。任何解决方案???

谢谢,

1 个答案:

答案 0 :(得分:0)

一些想法:

可能是你错过了P1前面的#符号。如果您尝试将P1标识为名称,则需要$('[name="P1"]')。为了捕获这样的符号,如果你可以包含实际代码,而不是放入默认字符串,将会有所帮助。同样,看起来你正在通过名字识别B1。如果它是id或类或其他东西,那将是你的问题。出于这种原因,使用包含相关HTML的代码示例也可能会有所帮助。

除此之外,您看到 的影响是什么?在回答这样的问题时,同时获得预期结果和实际结果通常很有帮助。

不是一个建议的答案,鉴于你有语义问题,我倾向于保留jQuery.Validator.addMethod调用中的所有逻辑,因为它有助于保持语义更简单,并且所有这些都在同一个地方。我自己也没有看到你的语义有什么问题。

编辑:是的。就像我想的那样。您正在使用$("#P1")。这将为您提供Id为“P1”的节点。为了使用JQuery获取名称,您需要使用$('[name="P1"]')。或者,您可以设置HTML,以便相应的标记具有与其名称匹配的ID(就像您使用Dropdownbox一样)。