Получение значения входного текстового поля и добавление его в текстовое поле

0

Я новичок в jQuery, и мне интересно, можно ли это сделать. У меня есть форма, которая имеет текстовое поле ввода имени. Я хочу захватить то, что пользователь вводит в это текстовое поле, и добавить его в первое предложение в моем текстовом поле. Так что текстовая область скажет "Дорогой" (независимо от того, что пользователь набрал). Любое нажатие в правильном направлении было бы оценено.

<form>
<label>First Name:</label>
<input type="text" class="fName" />
<br /><br />
<label>Last Name:</label>
<input type="text" class="lName">
<br /><br />
<textarea>Dear +firstname+</textarea>
</form>

Моя форма довольно проста. Я еще ничего не пробовал, но вы так помогаете мне идти в правильном направлении. Благодарю.

  • 1
    что ты уже испробовал? Можете ли вы показать нам свой код? Поместите это здесь и также на jsfiddle.net . Это, конечно, что-то, что возможно, но трудно ответить на ваш вопрос, по крайней мере, не зная структуру вашей страницы.
  • 0
    Как видно из ответов, это действительно сбивает с толку то, что вы спрашиваете, есть ли у вас проблемы с подключением обработчиков событий jquery и захватом / установкой значений? У вас есть проблемы с анализом содержимого текстовой области, чтобы заменить текущее имя другим? Вам нужно дать больше информации о вашей конкретной проблеме.
Показать ещё 2 комментария
Теги:
forms
input

6 ответов

1
Лучший ответ

Предполагая, что вход имеет идентификатор name а текстовое поле имеет идентификатор area тогда:

$("#name").on("input", function(){
  var name = $(this).val();
  var msg = "Your message here";
  var content = "Dear "+name+", \n" + msg;
  $("#area").text(content);
});

Я бы настоятельно советовал не использовать change 1 или keyup 2, поскольку input 3 - это гораздо более полная проверка того, изменил ли пользователь что-либо.

Вот пример JSFiddle


Примечания:

  1. change реагирует только на размытие (т.е. пользователь нажимает вкладку или щелкает за пределами ввода).
  2. keyup работает только на нажатия клавиш, поэтому он не регистрируется, например, когда пользователь вставил их с помощью мыши.
  3. input регистрирует любое изменение на входе.

Обновить

Согласно моей дискуссии с @GeorgeMauer, вот рекомендуемый подход:

$("input.full-name").on("input", function(){
  var full_name = $(this).val();
  var form = $(this).closest("form");
  var message = form.find(":input.message");
  var content = message.val();
  var lines = content.split("\n");
  lines[0] = "Dear " + full_name + ",";
  var new_message = lines.join("\n");
  message.val(new_message);
});

См. Обновленный пример JSFiddle.

Это добавило преимущества повторного использования формы без добавления дополнительного JavaScript. И он также работает намного лучше (например, вы можете свободно редактировать оба входа).

  • 0
    Спасибо за помощь
  • 0
    @jdkarate Пожалуйста, игнорируйте мой первый подход и посмотрите обновление.
1

Вы можете попробовать что-то вроде этого:

<script>

    $(function() {

        $( "#name" ).change(function() {
            $("#textAreaId").append($( "#name" ).val());  
        });

     });

</script>    

Надеюсь, это поможет вам!

  • 0
    Смотрите мой комментарий на другой ответ - это не то, что он ищет.
1

Попробуй это:

$('input').keyup(function() {
    $('textarea').text($(this).val());
});
  • 0
    Он хочет «добавить его в первое предложение», хотя я предполагаю, что он действительно хочет это в конце первой строки. Также я бы осторожно предупредил его об использовании слишком широких селекторов. Он новичок, поэтому нет смысла давать ему советы, которые приведут к тому, что сразу будет сложно найти ошибки.
  • 0
    Он попросил правильное направление. Я пытался дать ему это.
Показать ещё 2 комментария
0

Вы знакомы с AJAX? Если да, то это лучший подход к использованию.

0

Изменить: для вашей ситуации это не похоже, что вы правильно настраиваете форму. Формы предназначены для представления группы информации, а затем помещают эту информацию в другое место - туда, куда ей нужно идти. Следовательно, я переместил вашу textarea вне формы.

Я бы рекомендовал настроить ваш HTML так:

<form id="target" action>
    <label>First Name:</label>
    <input type="text" id="fName" />
    <br /><br />
    <label>Last Name:</label>
    <input type="text" id="lName" /><br><br>
    <input type="submit" value="Submit"/>
    <br /><br />
</form>
<textarea id="message"></textarea>

И вот jQuery, который я использовал:

$('form#target').submit(function(e) {
    e.preventDefault();
    var message, firstName, lastName;

    message = "Dear ";
    firstName = $('input#fName').val();
    lastName = $('input#lName').val();

    message += firstName + ' ';
    message += lastName + ',';
    $('textarea#message').text(message);
});

Примечание. Я изменил свойства class на id потому что id предназначен для уникальных тегов. Если у вас было несколько элементов, которые вы хотели захватить сразу с помощью jQuery, классы были бы способ пойти.

Предварительный просмотр здесь.

Надеюсь, это поможет!

  • 0
    Его сообщение не отделено от его содержания. все в текстовой области
  • 0
    Он говорит: «Я хочу взять то, что пользователь вводит в это текстовое поле, и добавить его к первому предложению в моей текстовой области». что звучит для меня как два компонента являются отдельными. Вот теперь как вы интерпретируете вопрос?
Показать ещё 5 комментариев
0

Так что это обманчиво сложный вопрос, потому что вы пытаетесь обновить ЧАСТЬ текста внутри текстового поля. Внутри текстовой области нет структуры, это просто "текст". Так что то, что вы просите, похоже на наличие ведра шаров пинг-понга, написание имени на одном из них, смешивание ведра, а затем сообщение кому-то, что они должны постоянно заменять именованный шар новым.

Хотя есть способы сделать это, он поднимает кучу вопросов, на которые я сомневаюсь, что вы хотите ответить - что, если они удаляют первую строку? Что делать, если они меняют свое имя прямо в текстовом поле? Что делать, если они пишут свое имя несколько раз в текстовой области? Что делать, если их браузер использует язык, который пишет сверху вниз?

Если вы не готовы ответить на эти запросы (и если вы, вероятно, начинаете более конкретный вопрос), я рекомендую изменить подход. Например, я сомневаюсь, что вы хотите, чтобы у них была возможность изменить первую строку. Поэтому вместо этого вы можете структурировать свою форму следующим образом:

<form>
  <label>First Name: <input class="first-name" /></label>
  <label>Last Name: <input class="last-name" /></label>
  <aside class="salutations">Dear <span class="first-name-salutation"></span></aside>
  <textarea class="message"></textarea>
</form>

Заметьте, что я переехал свои входы в ярлыки (это технически правильный способ сделать это без использования идентификаторов), удален <br> теги (вы должны использовать CSS для этого) и переместил приветствие в не редактируемый пользователе текст. Тогда ваш javascript может быть просто

$(function(){
  $('input.first-name').on('input', function(){
    $('.first-name-salutation').text($(this).text());
  });
})

А затем добавьте строку "Dear "+firstName в сообщение на сервере.

В качестве отступления я укажу, что это не 2009 год, и нет оснований для использования jquery непосредственно для таких вещей, когда есть отличные рамки, которые не заставляют вас делать так много вещей вручную, как Knockout и Angular.

  • 0
    Поскольку вы редактируете HTML, рекомендуется ссылаться по идентификатору, а не по классу, если другой вход на странице имеет такой же класс.
  • 0
    @ rybo111 Я не согласен. Идентификаторы должны быть зарезервированы только для тех элементов, которые вы знаете, чтобы факт был единственным экземпляром на странице, как предписывает спецификация html. Многие инструменты не будут работать должным образом при наличии дублирующихся идентификаторов. Известно ли нам, что это единственный экземпляр виджета на странице или нет другого виджета, использующего подобную семантику? Нет. Теперь то, что вы говорите, определенно является проблемой для моего кода, но я предпочитаю классы с уникальным ish, и, вероятно, выбрал бы контекст DOM ранее в сценарии и использовал бы его как второй параметр jquery
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню