JQuery添加验证方法来验证有关另一个元素的形式

问题描述:

我试图在JQuery中创建一个自定义的验证方法,我无法设法使其正常工作。JQuery添加验证方法来验证有关另一个元素的形式

这是我想做的事:

<div class="row"> 
    <label for="fld-stories">Stories</label> 
    <select id="fld-stories" class="valid" name="stories" title=""> 
     <option value="">--</option> 
     <option value="1" label="1">1</option> 
     <option value="2" label="2">2</option> 
     <option value="3" label="3">3</option> 
     <option value="4" label="4">4</option> 
     <option value="5" label="5">5</option> 
    </select> 
</div> 

<div id="row_master_bedroom_location" class="row"> 
    <label for="fld-master_bedroom_location">Master Bedroom Location</label> 
    <select id="fld-master_bedroom_location" name="master_bedroom_location" title=""> 
     <option value="up">Upstairs</option> 
     <option value="down">Downstairs</option> 
    </select> 
</div> 

如果用户选择主卧室的位置是楼上(见第二选择),故事的房子数量应大于或等于2 (这是合乎逻辑的,因为如果只有一个故事,主卧室不能在楼上)。

为此我尝试一个自定义的方法添加到我的JQuery验证:

$.validator.addMethod('masterBedroomLocation', function(value, element, params) { 
    if (value == 'up' && $("#fld-stories").val() < 2){ 
     return false; 
    } 
}, 'You cannot select &quot;Upstairs&quot; for a one&ndash;story home');  

我不知道如何获取表单另一个元素的值,我试过JQuery的旧时尚之路但它似乎并不奏效。

有关其他信息,我添加了自定义的方法在全球JavaScript文件,在结合了jQuery验证到有一类特殊的名字每一个表格功能。

+0

而是一个自定义的验证方法,为什么不只需修改相应的选择列表的选项?在做出选择之后,用户不会被呈现不适用的选项会更有意义。 – Sparky 2012-02-07 18:20:35

我设法让它工作。 它看起来像jQuery选择 $( “#FLD-故事”) 正常工作。 由于某种原因,我不知道,如果我反转我做我的支票的方式,并返回true而不是false,该方法有效。

下面是新方法:

$.validator.addMethod('masterBedroomLocation', function(value, element, params) { 
    if (value == 'up' && $("#fld-stories").val() >= 2){ 
     return true; 
    } 
}, 'You cannot select &quot;Upstairs&quot; for a one&ndash;story home'); 

我改进我的代码一点点。 下面是新方法:

$.validator.addMethod('masterBedroomLocation', function(value, element, params) { 
    if($('#fld-master_bedroom_location').val() == 'down'){ 
     return true; 
    } 
    else if($('#fld-master_bedroom_location').val() == 'up' && $("#fld-stories").val() >= 2){ 
     return true; 
    }else{ 
     return false; 
    } 
}, 'You cannot select &quot;Upstairs&quot; for a one&ndash;story home'); 

我希望这可以帮助别人。