【问题标题】:Javascript custom validationJavascript 自定义验证
【发布时间】:2011-06-24 11:17:07
【问题描述】:

我正在编写一个自定义 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');

问题出在哪里?

【问题讨论】:

标签: javascript asp.net validation


【解决方案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>

我建议请试试这个...

【讨论】:

  • 哈哈,我不允许使用内置的验证控件。我的上司告诉我他们是业余爱好者:)——没有冒犯……我也去找他们了,呵呵
  • label 转换成 span 成 html 所以请试试这个 var labelErr = document.createElement('span');
【解决方案2】:

我正在处理一些事情:

http://jsfiddle.net/ahallicks/kxPeN/2/

标签没有值属性

【讨论】:

    【解决方案3】:

    它的document.createElement不是document.CreateElement

    MDC 链接:document.createElement

    更新:您应该访问labelinnerHTML 而不是value

    sn-p

    var labelErr = document.createElement('label');
    labelErr.id = "ErrMsg" + i;
    labelErr.innerHTML= errmsg;
    var parent = inputArray[i].parentNode;
    parent.appendChild(labelErr);
    

    【讨论】:

    • 好的,通过了。现在,在创建标签后,我似乎无法为其“id”属性添加值?
    【解决方案4】:

    这不是对您问题的直接回答,但您的上级会采用 不同 的预构建验证方法吗?我偏爱FlowPlayers jQuery based validator。设置非常简单:

    $("#myform").validator();
    

    我过去写过几个验证框架。我终于厌倦了重新发明轮子。

    【讨论】:

      【解决方案5】:

      我可以建议一下吗:

      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"
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 2013-03-02
        • 2014-11-04
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        相关资源
        最近更新 更多