Копирование значения одного текстового поля в другое текстовое поле не работает, если для свойства Visible установлено значение false

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

Я хочу скопировать значение из textbox1 в textbox2 при выводе табуляции из textbox1 с помощью jquery. Для свойства TextBox2 visible установлено значение false.

После копирования значения из textbox1 в textbox2 я хочу изменить первые пять чисел textbox1 на XXXXX. Чтобы добиться этого, я написал следующий код. Код работает, когда видны оба текстовых поля, в противном случае работает только замена первых 5 чисел на X, а копирование в другое текстовое поле перестает работать.

внешний код:

 <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <div>
      
                      
            
            <asp:TextBox ID="TextBox1" runat="server" onchange="mychange();" ></asp:TextBox>
            
            <asp:TextBox ID="TextBox2" runat="server" Visible="false" ></asp:TextBox>
            <asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" />
        </div>
    </form>
  

Код jQuery:

 <script>
        function mychange() {


            var name = $("#<%=TextBox1.ClientID%>").val(); 
            $("#<%=TextBox2.ClientID%>").val(name); 
            var txt1 = $('#TextBox1');
            s = txt1.val();
            if (s.length > 5) {
                s = "XXXXX"   s.substring(s.length - 4, s.length);
                txt1.val(s);
            }
        }
    </script>
  

Я не уверен, почему копирование первых пяти чисел в другое текстовое поле перестает работать, если я делаю TextBox2 невидимым. Как я могу исправить эту проблему.

любая помощь будет принята с благодарностью.

Ответ №1:

Удалите свойство видимости первого текстового поля из HTML и добавьте функциональность в код JS, как показано ниже, для обработки скрытия элемента в самом JS.

 < script >
  window.addEventListener('load',()=>{
  
  document.querySelector("#<%=TextBox1.ClientID%>").style.display = "none";
  
  });
  function mychange() {


    var name = $("#<%=TextBox1.ClientID%>").val();
    
    $("#<%=TextBox2.ClientID%>").val(name);
    var txt1 = $('#TextBox1');
    s = txt1.val();
    if (s.length > 5) {
      s = "XXXXX"   s.substring(s.length - 4, s.length);
      txt1.val(s);
    }
  } <
  /script>  

Ответ №2:

Вместо использования visible:false вы просто используете display:none свойство, которое работает так же.

Почему это происходит: когда для элемента (элемента) установлено значение visible: false in ASP.net , это означает, что он вообще не отображается сбоку client . Так что технически оно вообще не существует в DOM.

Решение: просто установите CSS для вашего TextBox2 display: none значения значение и удалите visible:false из <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

Рабочая демонстрация:

 function mychange() {
  var name = $("#TextBox1").val();
  $("#TextBox2").val(name);
  var txt1 = $('#TextBox1');
  var s = txt1.val();
  if (s.length > 5) {
    s = "XXXXX"   s.substring(s.length - 4, s.length);
    txt1.val(s);
  }
  console.log('Hidden Input value: '   $("#TextBox2").val()) //display the value
}  
 #TextBox2 {
  display: none
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="form1" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
  <div>
    <input type="text" ID="TextBox1" runat="server" onchange="mychange();" placeholder="Type something > 5" />
    <input type="text" ID="TextBox2" runat="server"/>
    <Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click">
      Test
    </Button>
  </div>
</form>