2012-03-26 89 views
1

所以我有一个HTML下拉框4值A,B,C和D.和4预填充文本框(P1,P2,P3,P4)与一些文本在他们和4空白文本框(B1,B2,B3和B4)。jquery自定义规则验证与取决于和参数属性

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

如果下拉值为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

您是否在DropdownA前丢失了#号? – JSager 2012-03-26 18:07:18

+0

amm不,我将#sign放在原始代码中。 – Nanu 2012-03-26 18:58:38

+0

好吧,如果你没有发布原始代码,它会变得更加困难,但是我也可以看到你在改变对象之后遗漏了一个关闭点(你关闭了,取决于,但是没有改变) – JSager 2012-03-26 20:17:54

回答

0

的一点想法:

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

除此之外,你看到什么效果?在回答这样的问题时,通常既有预期的结果也有实际的结果。

因为您有语义问题,所以不会回答太多问题,我倾向于保留jQuery.Validator.addMethod调用中的所有逻辑,因为它有助于保持语义更简单一些,全部在同一个地方。我自己看不出你的语义有什么问题。

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

+0

本,我更新了包含#符号的代码,我希望这会限制混淆。上面这篇文章的预期结果是,当dropdownbox的值为A时,它应该只有这样,才能检查两个文本框中的值是否相同,即在P1和B1中。 ! – Nanu 2012-03-26 20:40:11

+0

你能把这个变成一个jsfiddle吗?当你只看到问题的一部分时,帮助某人调试某些东西是很难的。 – JSager 2012-03-26 21:01:09

+0

我把上面的jsfiddle,编译没有错误。但仍然无法正常工作。我怀疑params和取决于属性。任何线索? – Nanu 2012-03-26 22:01:30