2012-07-21 5 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

Смежные вопросы