【问题标题】:Validation for multiple textarea in javascript验证javascript中的多个文本区域
【发布时间】:2014-03-20 18:59:39
【问题描述】:

我有一个包含 2 个文本区域的页面,如果单击提交按钮时输入的字符超过最大长度,我想验证每个文本区域。下面的代码有问题 单击提交时,它只能检测 textarea1 是否超过最大长度,但不能检测其他 textarea。我想要做的是它可以确定哪个 textarea 超过了 maxlength,以便用户可以更正它。提前致谢。

 <html>
<head>

<script>
function testing()
{
    var txtlength=document.getElementById("txt1").value.length;
    if(txtlength>50)  
    {
        alert("Max1 length reached ");
        return false; 
    }
    else
    {
        return true; 
    }

    var txtlength1=document.getElementById("txt2").value.length;
    if(txtlength1>50)  
    {
        alert("Max2 length reached ");
        return false;
    }
    else
    {
        return true;
    }

}
</script>
</head>
<body>
<form action="test1.html" method="post" onsubmit="return testing();">
    <textarea id="txt1"></textarea>
    <textarea id="txt2"></textarea>
    <input type="submit" value="Submit"/>
</form>
</body>
</html>

【问题讨论】:

  • return 退出函数。永远不会到达第二个代码块。
  • 啊,谢谢你的 elclanrs :)

标签: javascript html


【解决方案1】:

更改您的以下功能:

var txtlength=document.getElementById("txt1").value.length;
    if(txtlength>50)  
    {
        alert("Max1 length reached ");
        return false; 
    }
    else
    {
        return true; 
    }

    var txtlength1=document.getElementById("txt2").value.length;
    if(txtlength1>50)  
    {
        alert("Max2 length reached ");
        return false;
    }
    else
    {
        return true;
    }

到:

var txtlength=document.getElementById("txt1").value.length;
        if(txtlength>50)  
        {
            alert("Max1 length reached ");
            return false; 
        }
        else
        {
            var txtlength1=document.getElementById("txt2").value.length;
            if(txtlength1>50)  
            {
            alert("Max2 length reached ");
            return false;
            }
            else
            {
            return true;
            }
        }

【讨论】:

  • else if 声明怎么样?
  • 感谢 BelgianMyWaffle
【解决方案2】:

return true 语句只能在代码末尾执行一次。

最终的代码应该是这样的:

<script>
function testing()
{
    var txtlength=document.getElementById("txt1").value.length;
    if(txtlength>50)  
    {
        alert("Max1 length reached ");
        return false; 
    }

    var txtlength1=document.getElementById("txt2").value.length;
    if(txtlength1>50)  
    {
        alert("Max2 length reached ");
        return false;
    }

    return true;
}
</script>           

【讨论】:

    【解决方案3】:

    与其对表单 ID 进行硬编码,不如从侦听器传递对 from 的引用:

    <form ... onsubmit="return testing(this);">
    

    在函数中,遍历表单的控件并检查它们:

    function testing(form) {
      var control;
    
      for (var i=0, iLen=form.elements.length; i<iLen; i++) {
        control = form.elements[i];
    
        if (control.tagName.toLowerCase() == 'textarea' && control.value.length > 50) {
           alert(control.name + ' must be 50 characters or less');
           return false;
        }
      }
    }
    
    }
    

    【讨论】:

    • 感谢 Robg,这是一个有趣的解决方案 :)
    【解决方案4】:
    function testing()
    {
        var txtlength=document.getElementById("txt1").value.length;    
        var txtlength1=document.getElementById("txt2").value.length;
        if(txtlength>50)  
        {
            alert("Max1 length reached ");
            return false; 
        }
        else if(txtlength1>50)  
        {
            alert("Max2 length reached ");
            return false;
        }
            return true;  
    }
    

    【讨论】:

    • 谢谢拉贾,但我必须给安德里加分,因为他先回答了。
    【解决方案5】:

    另一种方法与 Raja Dani post 相同,在 txtlength,txtlength1 上方放置一个名为 errormessage 的新 var 作为空字符串,将警报替换为在 errormessage var 中添加这些消息,如果错误消息长度 > 0 则输出警报否则为真? :)

    这不是最好的解决方案,而是另一种解决方法。

    我是新来的,试图在编辑时添加帖子(你们让它变得如此复杂)只添加评论而不编辑它,因为我无法评论其他帖子,因为我的代表很低。

    【讨论】:

    • 随着时间的推移,您将获得更多积分。他们都对 andri 有相同的答案
    猜你喜欢
    • 2017-03-25
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多