所以我有一个带有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中的值,代码工作正常。任何解决方案???
谢谢,
答案 0 :(得分:0)
一些想法:
可能是你错过了P1前面的#符号。如果您尝试将P1标识为名称,则需要$('[name="P1"]')
。为了捕获这样的符号,如果你可以包含实际代码,而不是放入默认字符串,将会有所帮助。同样,看起来你正在通过名字识别B1。如果它是id或类或其他东西,那将是你的问题。出于这种原因,使用包含相关HTML的代码示例也可能会有所帮助。
除此之外,您看到 的影响是什么?在回答这样的问题时,同时获得预期结果和实际结果通常很有帮助。
不是一个建议的答案,鉴于你有语义问题,我倾向于保留jQuery.Validator.addMethod调用中的所有逻辑,因为它有助于保持语义更简单,并且所有这些都在同一个地方。我自己也没有看到你的语义有什么问题。
编辑:是的。就像我想的那样。您正在使用$("#P1")
。这将为您提供Id为“P1”的节点。为了使用JQuery获取名称,您需要使用$('[name="P1"]')
。或者,您可以设置HTML,以便相应的标记具有与其名称匹配的ID(就像您使用Dropdownbox一样)。