2017-02-14 4 views
0

Я думаю, что я сделал довольно исчерпывающий поиск, но пока не нашел ответа.Jquery validate plugin для записи «как минимум 1» в списке

У меня есть список (выберите несколько) адресов URI, которые могут быть добавлены в поле ввода над ним. (т. е. введите адрес URI, нажмите кнопку ADD, URI будет добавлен в список ниже).

Использование JQuery Validate плагин, я определил поле выбора, selectboxUriList как

selectboxUriList: { 
    required: true, 
    rangelength: [1, 6] 
} 

, а также сообщения об ошибках:

selectboxUriList: { 
    required: "Required field", 
    minlength: "Must have at least 1 URI entry" 
} 

И различных итераций MINLENGTH, maxLegth и т.д. Однако даже после ввода элемента проверка не удалась , если только Я вручную щелкнул элемент в списке. Затем он проходит немедленно.

$('[name="btnUriAdd"]').click(function() { 
    var uri = $('#txtUriEntry').val(); 
    $('#selectboxUriList).append('<option value="'+ uri + '">'+ uri + '</option>'); 
    //$("#selectboxUriList").selectmenu('refresh', true); 
    //$('#txtUriEntry').val(''); 
    //$('#btnUriAdd').attr('disabled', true); 
      // manually call validate on the element?? 
    $('#sendForm').validate().element('#selectboxUriList'); 
}); 

Я прошел через несколько внушения на StackOverflow, но большинство, кажется, полагаться на пользователе физически выбор элемента. Я просто хочу подтвердить, что пользователь ввел по крайней мере один адрес URI в поле списка.

Submitted without manually clicking item

After manually clicking item

Я попытался с помощью .Кнопке(), .он ('изменения', функция() ... и т.д.

бы признателен за любые предложения или советы.

ответ

0

Я думаю, что придумал решение, которое работает для меня.

Создано пользовательское определение правила плагина JQuery Validate:

selUriList: { 
    uriListCheck: true 
}, 

Тогда определено само правило:

jQuery.validator.addMethod('uriListCheck', function(value) { 
    var hasOptions = !!$('#selUriList option').filter(function() { 
     return !this.disabled; 
    }).length; 
    if (hasOptions <= 0) { 
     return false; 
    } else { 
     return true; 
    } 
}, "At least one base URI is required"); 

Тогда было правило вызывается, когда кнопка ADD называлась:

$('[name="btnUriAdd"]').click(function() { 
    var uri = $('#txtUriEntry').val(); 
    $('#selUriList').append('<option value="' + uri + '">' + uri + '</option>'); 
    $('#txtUriEntry').val(''); 
    $('#btnUriAdd').attr('disabled', true); 
    $('#sendForm').validate().element('#selUriList'); 
}); 

отправляю это в случае, если это помогает кому-либо еще.