我有一个用户控件,其中包含3个(日期,月份,年份)下拉列表。我已在aspx页面上调用此用户控件。
请选择日期自。
在我的aspx页面上,所有字段都通过javascript验证进行验证。 当我从该用户控件中选择日期(而不是月份和年份),然后单击“提交”按钮时,它会显示错误消息。 但我的问题是,如果我选择年份(不是日期,月份),那么在这种情况下既不会触发错误消息也不会保存数据。 我希望每当至少一个字段(日,月,年)没有被选中时它就会发出消息。我想在clentside上处理这个问题。请给我你的建议。
function InputValidation(vg) {
var isValid = true;
try {
var j = 0;
var inputCtrlArr = new Array();
var key = 'block';
var inputIntputArr = document.getElementsByTagName('input');
var inputDdlArr = document.getElementsByTagName('select');
var inputTextareaArr = document.getElementsByTagName('textarea');
var c = 0;
for (var i = 0; inputIntputArr.length > i; i++) inputCtrlArr[c++] = inputIntputArr[i];
for (var i = 0; inputDdlArr.length > i; i++) inputCtrlArr[c++] = inputDdlArr[i];
for (var i = 0; inputTextareaArr.length > i; i++) inputCtrlArr[c++] = inputTextareaArr[i];
for (var i = 0; inputCtrlArr.length > i; i++) {
if (inputCtrlArr[i].getAttribute('required') == 'true' && inputCtrlArr[i].getAttribute('vg') == vg) {
if (inputCtrlArr[i].value.trim() == '') {
//errinputReqCtrlArr[j++] = inputCtrlArr[i];
key = 'block';
isValid = false;
}
else {
key = 'none';
}
if (inputCtrlArr[i].type == "checkbox") {
if (inputCtrlArr[i].checked == false) {
//errinputReqCtrlArr[j++] = inputCtrlArr[i];
key = 'block';
isValid = false;
}
else {
key = 'none';
}
}
var errorDivId = inputCtrlArr[i].getAttribute('ErrorDivId');
var objErrorDivId = document.getElementById(errorDivId);
if (objErrorDivId != null) objErrorDivId.style.display = key;
}
}
}
catch (ex) { }
}
function InputCntrlValidate(obj) {
try {
if (obj.getAttribute('required') == 'true') {
if (obj.value == '') {
key = 'block';
}
else {
key = 'none';
}
var errorDivId = obj.getAttribute('ErrorDivId');
var objErrorDivId = document.getElementById(errorDivId);
if (objErrorDivId != null) objErrorDivId.style.display = key;
}
} catch (ex) { }
}
function sanitizeInput(obj) {
if (obj.getAttribute('msg') == obj.value) {
alert("same value");
}
}
答案 0 :(得分:0)
如果是我,我会在calendar contro上使用AjaxControlToolKit l。除非该字段是强制性的,否则不需要验证。它更容易,看起来好多了。所有客户方。
只需下载ajxcontrolkit dll并将其包含在您的项目中,并按照任何自定义控件/第三方组件使用。
修改强>
好的,如果你只想要选择至少一个下拉菜单,那么试试JQuery,例如
function isDropDownsValid()
{
var isValid = true;
$('select').map(function()
{
if($(this).val() == -1)
{
isValid = false;
}
});
return isValid;
}
然后连接到你的提交按钮
<asp:Button ID="myButton" runat="server" OnClientClick="return isDropDownsValid" Text="Submit />
这是一个带有演示的fiddle。您可能需要更改选择器$('select')
以定位所需的确切下拉列表。
答案 1 :(得分:0)
问题在于您的JavaScript。因为如果它适用于一个下拉列表,那么它应该适用于其他两个。此外,您必须检查月份和日期。如果它是feb那么日子应该是28或29,这将取决于年份。因此需要付出很多努力来解决它。
答案 2 :(得分:0)
您只需要三个RequiredFieldValidators
,每ControlToValidate
个DropDownLists
一个 <asp:DropDownlist ID="DdlDate" runat="server">
<asp:ListItem Text="please select" Enabled="true"></asp:ListItem>
<asp:ListItem Text="1"></asp:ListItem>
<asp:ListItem Text="2"></asp:ListItem>
<asp:ListItem Text="3"></asp:ListItem>
</asp:DropDownlist>
<asp:RequiredFieldValidator ID="ReqDate"
ControlToValidate="DdlDate"
InitialValue="please select"
ErrorMessage="Please select Date"
Display="Dynamic"
runat="server">
</asp:RequiredFieldValidator>
<asp:DropDownlist ID="DdlMonth" runat="server">
<asp:ListItem Text="please select" Enabled="true"></asp:ListItem>
<asp:ListItem Text="January"></asp:ListItem>
<asp:ListItem Text="February"></asp:ListItem>
<asp:ListItem Text="March"></asp:ListItem>
</asp:DropDownlist>
<asp:RequiredFieldValidator ID="ReqMonth"
ControlToValidate="DdlMonth"
InitialValue="please select"
ErrorMessage="Please select Month"
Display="Dynamic"
runat="server" >
</asp:RequiredFieldValidator>
<asp:DropDownlist ID="DdlYear" runat="server">
<asp:ListItem Text="please select" Enabled="true"></asp:ListItem>
<asp:ListItem Text="2010"></asp:ListItem>
<asp:ListItem Text="2011"></asp:ListItem>
<asp:ListItem Text="2012"></asp:ListItem>
</asp:DropDownlist>
<asp:RequiredFieldValidator ID="ReqYear"
ControlToValidate="DdlYear"
InitialValue="please select"
ErrorMessage="Please select Year"
Display="Dynamic"
runat="server" >
</asp:RequiredFieldValidator>
<asp:Button ID="BtnSubmit" runat="server" Text="submit" />
。如果您的默认值为f.e. “请选择”您应将其设置为验证者的InitialValue。
以下是一个示例(我只为日期,月份和年份添加了少量ListItem而不是全部):
{{1}}