2017-02-14 52 views
0

我想我已經做了相當詳盡的搜索,但還沒有找到答案。Jquery驗證插件列表框中'至少1'條目

我有一個列表框(選擇多個)的URI地址,可以通過它上面的輸入字段添加到。 (即:輸入一個URI地址,點擊ADD按鈕,這個URI將被添加到下面的列表框中)。

使用jQuery驗證插件,我已經定義了選擇框,selectboxUriList,作爲

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

除了錯誤消息:的minLength,maxLegth等

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

而且各種迭代然而即使在輸入一個項目後,驗證失敗,除非我手動單擊列表框中的一個項目。然後它立即通過。

$('[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

我使用.change()試過了,。對( '變',函數()...等

將不勝感激任何意見或建議。

回答

0

我想我想出了一個適用於我的解決方案

創建一個自定義JQuery驗證插件規則定義:

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'); 
}); 

的情況下,發佈此它可以幫助其他人。