Что-нибудь не так в исходном коде, который я написал

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

Я пишу код для печати значения текстового поля в другое текстовое поле, но я не могу этого добиться, может ли кто-нибудь сказать, что не так, или кто-нибудь может дать мне эквивалент JavaScript для достижения этого

  <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jQuery/1.2.6/jQuery.min.js"> 
        </script>

        <script type="text/javascript">
$('#TextBox1').keyup(function(){
$('#TextBox2').val(this.value);
});
        </script>

    </div>
</form>
  

Комментарии:

1. Я не уверен, на что this там ссылается. Я бы проверил это.

2. Когда вы «Просматриваете исходный код» на своей странице, как выглядят <textarea> значения «id»? Вы уверены, что ASP не дает им полные имена или что-то в этом роде?

3. Кажется, у меня ничего не работает, я получаю object excepted могу ли я получить javascript, пожалуйста

4. @Cobra_Fast вы можете быть полностью уверены, что this это будет ссылаться на элемент «TextBox1» в обработчике событий, потому что jQuery работает именно так.

5. @Dorababu: asp: TextBox создает поле <тип ввода =’текст’>?

Ответ №1:

Я вижу две потенциальные проблемы. Один из них, как определили @Neal и @ Nicola, заключается в том, что вам нужно обернуть все, что ссылается на элемент DOM внутри

 $(document).ready(funcution(){ 
  // here
});

// or, this way, both are equivalent
$(function(){

});
  

Во-вторых, идентификатор, присвоенный вашим текстовым полям, скорее всего, НЕ TextBox1, а TextBox2. Это потому, что ASP.NET генерирует уникальные идентификаторы для клиентской стороны. Скорее всего, они будут выглядеть примерно так:

 ctl00_TextBox1
  

или что-то подобное. Проверьте сгенерированный HTML-код вашей страницы для подтверждения. Кроме того, я обнаружил, что консоль JavaScript плагина Firebug FireFox или инструменты разработчика Chromes очень полезны для определения, действительно ли мой селектор jQuery возвращает что-либо. Просто откройте консоль в одном из этих браузеров и выполните:

 $('#TextBox1');
  

Если ваш селектор сработает, вы получите массив с 1 элементом в нем. Если он ничего не находит, он просто вернет пустой массив.

Ответ №2:

Вам нужно обернуть в ready (чтобы ваш js выполнялся, когда DOM будет готов):

 $(function(){

   $('#TextBox1').keyup(function(){
       $('#TextBox2').val(this.value);
   });

});
  

Комментарии:

1. 1 Вот в чем проблема (вместе с исправленным идентификатором). Я даже не заметил этого.

2. @patrick dw пока элементы находятся в DOM при запуске скрипта, он должен работать нормально.

3. В опубликованном коде они есть, @Neal — конечно, если опубликованный код не является реальным кодом, тогда мы действительно понятия не имеем, что происходит 🙂

4. @Pointy: Ты прав. Я сегодня очень смущен. Элементы, безусловно, находятся в DOM перед скриптом. Вчера я возился с Erlang. Я думаю, что это поджарило мой мозг!

5. @pointy, верно, верно, но у меня всегда вошло в привычку оборачивать свой код просто так

Ответ №3:

Я думаю, это должно сработать. Вам нужна $(document).ready(function(){}); оболочка, чтобы обработчик был прикреплен после того, как dom будет готов. Я редактировал с помощью скрипта включения из CDN

 <script src=”http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js”></script>
 <script>
    $(document).ready(function(){
        $('#TextBox1').keyup(function(){
         $('#TextBox2').val($(this).val());
        });
    };
 </script>
  

Ответ №4:

Я много пробовал, но, похоже, jquery это не сработало, поэтому я получил требуемое следующим образом

  <script type="text/javascript">
 function sync()
{
  var n1 = document.getElementById('TextBox1');
  var n2 = document.getElementById('TextBox2');
  n2.value = n1.value;
}
</script>
  

Ответ №5:

Поскольку текстовые поля размещают свое содержимое между <textarea> тегами, а не в value атрибуте, вам, вероятно, повезет больше при использовании $(this).text() , а не this.value :

 $('#TextBox1').keyup(function() {
    $('#TextBox2').text($(this).text());
});
  

Кроме того, #TextBox12 != #TextBox2 .

Комментарии:

1. Нет, для <textarea> вы должны использовать value свойство, потому что оно обновляется при вводе пользователем.

2. Я никогда не слышал о том, чтобы входные данные вели себя как текстовые области. Никогда.

3. @Cobra_Fast: То есть вы хотите сказать, что .value свойство неверно?

4. @patrick dw Нет, я говорил, что «Я никогда не слышал о том, чтобы входные данные вели себя как текстовые области». …

5. @Cobra_Fast: Да, я прочитал ваш комментарий. Поскольку вы были так настойчивы, казалось, что вы высказываете какую-то точку зрения. Я просто не уверен, что это такое.