2012-07-21 70 views
0

在我的交易订单表单中,如果用户选择订单类型=“限制”,则必须指定限价。我试图使用funcCall强制执行此规则,但它不起作用。如果选择限价订单且限价字段留空,验证引擎将成功验证表单。这里是我的HTML:jQuery-Validation-Engine:基于其他字段的必填字段

<li> 
    <label for=tradeForm_orderType>Order Type</label> 
    <select id=tradeForm_orderType name=orderParams.type> 
     <option value=Market>Market</option> 
     <option value=Limit>Limit</option> 
    </select> 
</li>    

<li id=tradeForm_limitPriceItem> 
    <label for=tradeForm_limitPrice>Limit Price</label> 
    <input class="validate[funcCall[checkLimitOrder],custom[number]]" 
     type=text name=orderParams.limitPrice.amount id=tradeForm_limitPrice> 
</li> 

这是我的checkLimitOrder功能:

function checkLimitOrder(field, rules, i, options) { 
    if ($('#tradeForm_orderType').val() === 'Limit' && field.val().length === 0) { 
     return 'Please enter a limit price'; 
    } 
} 

这几乎工程! checkLimitOrder确实被调用并返回错误消息。然而在返回时,jQuery验证引擎忽略基于以下逻辑(行582-583)的错误信息:

// If the rules required is not added, an empty field is not validated 
if(!required && field.val() == "") options.isError = false; 

好了,我不能让,因为它是唯一有条件时需提供该领域。有什么办法可以解决这个问题吗?

回答

1

回答我自己的问题。

原来,验证引擎不验证隐藏字段(虽然这不是明确的documented。所以解决方法是隐藏limitPriceItem字段不需要。现在我可以把“validate [required,custom [number] ]”关于限价领域,它证明,只有当字段可见。

+0

顺便说一句,在应聘的源代码,我发现所谓的‘validateNonVisibleFields’一个未公开的选项,可以设置为true,这将强制验证不可见的字段。 – BardMorgan 2015-11-12 20:34:22