JavaScript; Копировать текст в начало поля ввода при нажатии на него

У меня такой код:

<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

Что мне нужно сделать: если я щелкну строку, class = "name" которой "копирует" текст в ней, и вставляю ее в начало value = "".

Средства:

При нажатии на <span class = "name">Sabrina</span>

менять

This is a test! в поле ввода

к

SabrinaThis is a test!

У тебя есть идеи, как это сделать? Могу ли я использовать JavaScript или мне нужен jQuery?

Могу сделать это в любом случае. Разбейте это на различные части ... как создать событие и получить событие элемента, которое произошло в обработчике ... как получить его текст ... и как изменить значение конкретного ввода. Затем исследуйте каждую часть, чтобы получить код для начала.

charlietfl 04.07.2018 16:46

весь этот вопрос слишком широк. Stackoverflow не является бесплатным сервисом написания кода или учебным сервисом "как"

charlietfl 04.07.2018 16:47

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

ADyson 04.07.2018 16:48

я согласен с @charlietfl. это действительно просто с javascript и / или jquery. вам просто нужно знать некоторые основы для этого!

MajiD 04.07.2018 16:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
4
136
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Если вы думаете о решении jQuery, вы можете попробовать следующее:

var text = $('#input').val();
$('.name').click(function(){
  $('#input').val($(this).text() + ' ' + text);
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

Если вам нравится Vanilla JS:

var text = document.getElementById('input').value;
document.querySelectorAll('.name').forEach(function(span){
  span.addEventListener('click', function(){
    document.getElementById('input').value = this.textContent + ' ' + text;
  });
});
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

это в значительной степени противоположное тому, о чем просили. Идея заключалась в том, чтобы взять текст из диапазона и добавить его к существующему тексту в текстовом поле, а не добавлять текст в диапазон.

ADyson 04.07.2018 16:50

Без проблем. Теперь это лучшее решение, потому что оно сбрасывает значение каждый раз, а не бесконечно добавляет дополнительные значения, как большинство других ответов.

ADyson 04.07.2018 16:58

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

$(document).ready(function(){
	var initialVal = $("input").val();
    $("span.name").click(function(){
    	$("input").val($(this).text() + initialVal);
    });
});
<!DOCTYPE html>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>

<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

</body>
</html>

Зачем указывать span в селекторе? И если на странице есть больше входов, этот код изменит их!

Chayim Friedman 04.07.2018 16:50

Используйте следующий код:

$(document).ready(function() {
  var $input = $('#input');
  $('.name').click(function() {
    $input.val($(this).text() + $input.val());
  });
});
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Редактировать:

Or by vanilla JS (without any libraries):

window.addEventListener('load', function() {
  var input = document.getElementById('input');
  document.querySelectorAll('.name').forEach(function(elem) {
    elem.addEventListener('click', function() {
      input.value = this.textContent + input.value;
    });
  });
});
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Для этого вы можете использовать параметр функции функции .val():

Таким образом, вы можете получить текущее значение поля ввода и связать его с текстом выбранного диапазона

$('.name').on('click', function() {

  var text = $(this).text();
  $('#input').val(function(index, value) {
    return text + value;
  });

});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

Кто-нибудь хочет уточнить, что не так с этим решением?

empiric 04.07.2018 16:50

с jQuery:

$('.name').on("click", function() {
    var name = $(this).text();
    $("#input").val(name + " " + $("#input").val());
})
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class = "name">test</span>
<input type = "text" value = "This is a test!" name = "message" id = "input">
Ответ принят как подходящий

Do you have an idea how to do it? Can I use JavaScript or do I need jQuery?

Я предполагаю, что вы спросили об этом, потому что в первую очередь хотите этого с помощью простого JavaScript.

Вот как это сделать без JQuery:

document.querySelectorAll('.name').forEach(function(elem){
	elem.addEventListener('click', function(){
  	document.querySelector('#input').value = this.innerText + document.querySelector('#input').value;
  });
});
<span class = "name">Peter</span><br>
<span class = "name">Harald</span><br>
<span class = "name">George</span><br>
<span class = "name">Sabrina</span><br>

<input type = "text" value = "This is a test!" name = "message" id = "input">

Другие вопросы по теме