Быстрый вопрос;
У меня есть форма со входами (textarea, select и edit), и я хочу отразить то, что я пишу в них. Я хочу привязать данные, которые я вводил здесь, в другие поля, только для визуального подтверждения.
Я использую это для создания небольшой внутренней веб-страницы ToDo HTML, и когда вы добавляете новую задачу, я хочу, чтобы входы отражались в задаче "предварительного просмотра" над полями ввода.
Любой способ сделать это? Или HTML, Javascript или PHP?
Спасибо заранее =)
Поскольку вы специально не задали решение jQuery, вот один из простых javascript:
Предположим, что у вас есть textarea
и div
, и вы хотите скопировать из textarea
в div
в реальном времени (такая же процедура применима к любому другому элементу, в который вы можете ввести).
Html это:
<textarea name="test" onkeyup="copyData(this,'copytarget')"></textarea>
<div id="copytarget"></div>
Тогда javascript:
function copyData(el, targ) {
document.getElementById(targ).innerHTML = el.value;
}
Это просто копирует все, набранные в textarea
каждый раз, когда вы отбрасываете палец с клавиатуры на клавиатуре.
Один из вариантов, используя jQuery:
$(':input').change(function(){
$('label[for="' + this.id + '"]').text('Label for "' + this.id + '" value: ' + this.value);
});
В обычном JavaScript (с опозданием):
function updateLabel (){
var label = this.labels[0],
textProp = 'textContent' in document ? 'textContent' : 'innerText';
label[textProp] = 'Element value: ' + this.value;
}
var inputTypeElems = document.querySelectorAll('input, select, textarea');
[].forEach.call(inputTypeElems, function(a){
a.addEventListener('change', updateLabel);
});
И предложить более отзывчивый подход:
function updateLabel (){
var label = this.labels[0],
textProp = 'textContent' in document ? 'textContent' : 'innerText';
label[textProp] = 'Element value: ' + this.value;
}
var inputTypeElems = document.querySelectorAll('input, select, textarea');
[].forEach.call(inputTypeElems, function(a){
var evtName;
switch (a.tagName.toLowerCase()){
case 'input':
case 'textarea':
evtName = 'keyup';
break;
default:
evtName = 'change';
}
a.addEventListener(evtName, updateLabel);
});
Рекомендации:
Используйте событие change
в полях ввода.
$('input, texarea').change(function(){
$('#previewFor' + $(this).attr('id')).text( $(this).val() );
});
$('select').change(function(){
$('#previewFor' + $(this).attr('id')).text( $('option:selected', this).text() );
});
вставить в вас страницу html
<script>
var inputTextHandler = function(){
// you input
var MyTextInput = $("#MyTextInput");
// set listener to yurs input
MyTextInput.change(function(){
// curren text of input field
var newText = this.val();
// set this text to prewie block
$("#MyTextPrewie").val(newText);
});
}
// run you handler
inputTextHandler();
</script>
<input id="MyTextInput"></input>
<input id="MyTextPrewie"></input>