我试图在我的vb.net页面中使用JavaScript实现自定义验证器。此验证器应检查是否在多选列表框中没有任何选定的值,如果是,则会弹出错误。
问题是,我想做客户端,但在我的验证功能'功能我只获取最后一个选中(或未选中,如果已选中)项目。我知道如何在代码隐藏代码中执行此操作,但我想在客户端执行此操作。
aspx代码:
<asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple">
</asp:ListBox>
<asp:CustomValidator id="cvEdit" runat="server" Display="None" ControlToValidate="lbEdit" ClientValidationFunction="validateFunction"/>
<ajax:ValidatorCalloutExtender runat="server" ID="vceEdit" TargetControlID="cvEdit" />
JavaScript代码:
function validateFunction(source, arguments) {
var options = document.getElementById(source.controltovalidate).options;
for (var i = 0; i < options.length; i++) {
if (options[i].selected == true) {
args.IsValid = true;
return;
}
}
args.IsValid = false;
}
正如我所说,由于最后一个(联合国)选定的项目将是唯一一个在&#39;选项中选择的项目。数组,验证函数将始终返回true ...
我想在另一个javascript函数中填充另一个数组作为真正选择的数组&#39;并在每次函数触发时将其值与所选选项进行比较..但我认为应该有更好的方法。
那么......有没有直接的方法从javascript中的多重列表框中获取所有选定的项目?
答案 0 :(得分:3)
您的问题有点不清楚,而且您的功能似乎有效,但我将在这里回答的是问题的最后一部分那么......是否有直接的方式来获取所有选定的项目javascript中的multichoice listbox?
试试这个js功能
<script type="text/javascript">
function validateFunction() {
var options = document.getElementById('<% = this.lbEdit.ClientID %>').options;
var selectedItems;
for (var i = 0; i < options.length; i++) {
if (options[i].selected == true) {
if (selectedItems) {
selectedItems = selectedItems + ";" + options[i].value;
}
else {
selectedItems = options[i].value;
}
}
}
if (selectedItems) {
alert(selectedItems);
return true;
}
else {
alert("No item was selected");
return false;
}
}
</script>
这是aspx代码,我删除了验证器
<asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple" >
</asp:ListBox>
<asp:Button ID="test" runat="server" Text="send" OnClientClick="return validateFunction();"/>
在浏览器的开发者工具中,您可以看到有关对象所有属性的详细信息
答案 1 :(得分:1)
let a1 = [
{
Selected:false,
},
{
Selected:false
},
{
Selected:false
}];
if(a1.some(i =&gt; i.Selected)) 的console.log(真); 其他 的console.log(假);
也许你想要什么