如何根据下拉更改 TextArea 验证

Posted

技术标签:

【中文标题】如何根据下拉更改 TextArea 验证【英文标题】:How to change TextArea validation based on dropdown 【发布时间】:2020-12-18 00:13:09 【问题描述】:

我需要根据以下场景对 TextArea 进行验证:

    如果在下拉列表中选择了 Mobile,则只能在 TextArea 中输入数字。 如果在下拉列表中选择了电子邮件,我们可以在 TextArea 中输入任何字符。

image snippet here

下面是我实现上述场景的代码。我已经根据文本区域的类名进行了验证。当我更改下拉值时,我正在更改文本区域的类名。

<html>
   <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
      <script>
      function changeNotifyTypeValue(textboxControl)
      
          textboxControl.value="";
          if (textboxControl.className=="mobileValidation")
            textboxControl.className="emailValidation";
          else
           textboxControl.className="mobileValidation";
      
      
      $(function() 
          $('.numberValidation').keyup(function() 
          this.value = this.value.replace(/[^0-9,][.]?/g, '');
          );
          $('.emailValidation').keyup(function() 
          //email validation
          );
      );
      </script>
   </head>
   <body>
      <table border="1" class="display"
         id="NotificationTable">
         <thead>
            <tr style="background: #0086cd; color: #fff;">
               <th>Update NotifyType</th>
               <th>Update Address</th>
            </tr>
         </thead>
         <tbody>
            <tr>
               <td>
                  <select
                     id="notifyTypeID0"
                     class="form-control" name="notifyType0" onchange="changeNotifyTypeValue(updateAddress0)" >
                     <option selected value=EMAIL>EMAIL</option>
                     <option value="mobile">Mobile</option>
                  </select>
               </td>
               <td>
                  <textarea name="address0" id="updateAddress0"
                     class="emailValidation">abc@gmail.com</textarea>
               </td>
            </tr>
            <tr>
               <td>
                  <select id="notifyTypeID1" class="form-control" name="notifyType1" onchange="changeNotifyTypeValue(updateAddress1)" >
                     <option value="EMAIL">EMAIL</option>
                     <option selected value="mobile">Mobile</option>
                  </select>
               </td>
               <td> <textarea name="address1" id="updateAddress1" class="numberValidation">9999999999</textarea> </td>
            </tr>
         </tbody>
      </table>
   </body>
</html>

这是我的疑问

我可以通过检查元素看到,当我更改下拉值时,文本区域的类名正在运行时更改。但是,仍然基于文本区域的旧类名执行验证。

【问题讨论】:

【参考方案1】:

您的&lt;script&gt; 存在一些问题,您正尝试在 jquery 中使用纯 javascript。 一旦尝试这个脚本并检查

$(document).ready(function()
        $('textarea').keyup(function()
            if($(this).hasClass("mobileValidation"))
                var cv = $(this).val();
                $(this).val(cv.replace(/[^0-9,][.]?/g, ''));
             else if($(this).hasClass("emailValidation"))
                //your email validation code;
            
        );
    );

【讨论】:

【参考方案2】:

代码被 javascript 和 jQuery 弄乱了。我只提供 javascript 解决方案。而且类也不匹配(mobileValidation 和 numberValidation)。

这是运行代码。您可以运行代码 sn -p 并检查。

<html>

  <head>
    <script>
      function changeNotifyTypeValue(textboxControl) 
        textboxControl.value = '';
        if (textboxControl.className == "mobileValidation")
          textboxControl.className = "emailValidation";
        else
          textboxControl.className = "mobileValidation";
      

      function validate(textboxControl) 
        console.log(textboxControl.className);
        if (textboxControl.className == "emailValidation") 
          console.log('email');
         else 
          console.log('number');
          textboxControl.value = textboxControl.value.replace(/[^0-9,][.]?/g, '');
        
      
    </script>
  </head>

  <body>
    <table border="1" class="display" id="NotificationTable">
      <thead>
        <tr style="background: #0086cd; color: #fff;">
          <th>Update NotifyType</th>
          <th>Update Address</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>
            <select id="notifyTypeID0" class="form-control" name="notifyType0" onchange="changeNotifyTypeValue(updateAddress0)">
              <option selected value=EMAIL>EMAIL</option>
              <option value="mobile">Mobile</option>
            </select>
          </td>
          <td>
            <textarea name="address0" id="updateAddress0" class="emailValidation" onkeyup="validate(updateAddress0)">abc@gmail.com</textarea>
          </td>
        </tr>
        <tr>
          <td>
            <select id=" notifyTypeID1" class="form-control" name="notifyType1" onchange="changeNotifyTypeValue(updateAddress1)">
              <option value="EMAIL">EMAIL</option>
              <option selected value="mobile">Mobile</option>
            </select>
          </td>
          <td> <textarea name="address1" id="updateAddress1" class="mobileValidation" onkeyup="validate(updateAddress1)">9999999999</textarea> </td>
        </tr>
      </tbody>
    </table>
  </body>

</html>

【讨论】:

以上是关于如何根据下拉更改 TextArea 验证的主要内容,如果未能解决你的问题,请参考以下文章

如何根据它是不是是占位符来更改 textarea 文本的颜色?

JS更改值后验证textarea

根据数据验证选择更改公式中的值

如何在下拉列表更改时使用 jQuery 清除 TextBox

如何通过 ASP.NET 中的 javascript 访问 textarea 的值?

如何在 ReactJS 中使用换行符设置 textarea 值