0

在我的交易订单表格中,如果用户选择订单类型 = "limit",则必须指定限价。我正在尝试使用 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;

好吧,我不能使该字段成为必填项,因为它只是有条件地需要。有什么办法可以解决这个问题吗?

4

2 回答 2

1

回答我自己的问题。

原来验证引擎不验证隐藏字段(尽管这没有明确记录。所以解决方案是在不需要字段时隐藏limitPriceItem。现在我可以将“validate[required,custom[number]]”放在限制价格字段,并且仅在该字段可见时才有效。

于 2012-07-26T09:10:00.163 回答
1

您还可以使用 condRequired 参见http://posabsolute.github.io/jQuery-Validation-Engine/#validators/condrequired

于 2014-01-07T18:42:18.893 回答