2017-02-14 55 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'); 
}); 

的情况下,发布此它可以帮助其他人。