在我的交易订单表格中,如果用户选择订单类型=“限制”,则必须指定限价。我试图使用funcCall强制执行此规则,但它无法正常工作。如果选择限价订单且限价价格字段为空,则验证引擎会成功验证表单。这是我的HTML:
<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;
好吧,我不能让所需的字段,因为它只是有条件的要求。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
回答我自己的问题。
原来验证引擎不验证隐藏字段(虽然这不是显式的documented。所以解决方法是在不需要字段时隐藏limitPriceItem。现在我可以放“验证[必需,自定义] [数字]]“在限价区域内,只有当该字段可见时才会生效。
答案 1 :(得分:1)
您也可以使用condRequired,请参阅http://posabsolute.github.io/jQuery-Validation-Engine/#validators/condrequired