我正在编写一个自定义的javascript验证脚本,我遍历一个名为'toggle'的div中的所有输入元素,并选择每个具有名为'required'的类,并且该元素的值是一个空字符串(空)然后我需要创建包含错误消息的标签,并将它们放在文本框旁边。
以下是代码:
function clientErrMsgs() {
var container = document.getElementById("toggle");
var inputArray = container.getElementsByTagName("input");
for (var i = 0; i < inputArray.length; i++) {
alert("");
if (inputArray[i].getAttribute("class") == "required" && inputArray[i].value == "") {
var errmsg = inputArray[i].getAttribute("data-errormessage");
var labelErr = document.CreateElement('label');
labelErr.id = "ErrMsg" + i;
labelErr.value = errmsg;
var parent = inputArray[i].parentNode;
parent.appendChild(labelErr);
}
}
}
程序执行良好(使用alert()测试)直到以下行:
var labelErr = document.CreateElement('label');
问题出在哪里?
答案 0 :(得分:1)
您可以使用asp.net自定义验证器来执行此操作
我给你举个例子,怎么做......
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="Sms length is exceeding over 160."
ClientValidationFunction="validateLength" ControlToValidate="txtSmsMessage"
SetFocusOnError="True" ValidationGroup="add">*</asp:CustomValidator>
<script language="javascript" type="text/javascript">
function validateLength(oSrc, args)
{
args.IsValid = (args.Value.length < 160);
}
</script>
我建议请试试这个......
答案 1 :(得分:0)
其document.createElement
不是 document.CreateElement
MDC链接:document.createElement
更新:您应该访问innerHTML
的{{1}}而不是label
摘录
value
答案 2 :(得分:0)
答案 3 :(得分:0)
这不是您问题的直接答案,但您的上司是否会选择不同的预建验证方法?我偏爱FlowPlayers jQuery based validator。设置非常简单:
$("#myform").validator();
我过去曾写过几个验证框架。我终于厌倦了重新发明轮子。
答案 4 :(得分:0)
我可以建议:
function clientErrMsgs() {
var container = document.getElementById("toggle");
var inputArray = container.getElementsByTagName("input");
for (var inp, i=0, n=inputArray.length; i<n; i++) {
inp = inputArray[i];
if (inp.getAttribute("class") === "required") {
var errMsg = container.getElementById("ErrMsg"+i);
if (!errMsg) {
errMsg = document.createElement('span');
errMsg.id = "ErrMsg" + i;
errMsg.innerHTML= inp.getAttribute("data-errormessage");
inp.parentNode.appendChild(errMsg);
}
errMsg.style.display= (inp.value === "")?"":"none"
}
}
}