Как заполнить форму общими данными при нажатии кнопки в javascript?

Я работаю над формой (вот рабочий пример), которая разработана с помощью html/php.

Фрагменты html/php-код, принадлежащие форме:

echo '<table class = "table table-striped"><thead class = "thead-dark"><tr><th scope = "col"><a class = "btn btn-primary" style = "float:right;" role = "button">Insert ABC</a></th></tr></thead><tbody><tr><td width = "*" valign = "top">';   

    echo '<form action = "add.php" id = "myform" method = "post">';  // Form START
    echo '<input name = "wdate" type = "hidden" id = "wdate" value = "'.$this_date.'">';

        echo '<div class = "form-row">';
        // Titles
        echo '<div class = "form-group col-md-6"><label for = "title_en">Title (EN)</label><input name = "title_en" type = "text" id = "title_en" value = "" class = "form-control"></div>';
        echo '<div class = "form-group col-md-6"><label for = "title_fr">Title (FR)</label><input name = "title_fr" type = "text" id = "title_fr" value = "" class = "form-control"></div>';
        echo '</div>';
        echo '<div class = "form-row">';

        // Descriptions
        echo '<div class = "form-group col-md-6"><label for = "description_en">Description (EN)</label><textarea rows = "3" name = "description_en" id = "description_en" class = "form-control"></textarea></div>';
        echo '<div class = "form-group col-md-6"><label for = "description_fr">Description (FR)</label><textarea rows = "3" name = "description_fr" id = "description_fr" class = "form-control"></textarea></div>';
        echo '</div>';
        echo '<div class = "form-row">';

        // Program
        echo '<div class = "form-group col-md-6"><label for = "program_id">Program</label><select class = "form-control" id = "program_id" name = "program_id">';
        $programs_list = programList();
        foreach($programs_list as $prog){
            echo '<option value = "'.$prog['program_id'].'">'.$prog['title_en'].' (ID#'.$prog['program_id'].')</option>';
        }
        echo '</select></div>';
        echo '</div>';
        echo '<div class = "form-row">';

        // Time selection
        date_default_timezone_set('America/Toronto');
        $time = date('H:i');
        echo '<div class = "form-group col-md-3 bootstrap-timepicker timepicker"><label for = "air_date">Air Date (24 hr)</label><input id = "air_date" name = "air_date" type = "text" class = "form-control input-small" value = "'.$time.'"><span class = "input-group-addon"><i class = "glyphicon glyphicon-time"></i></span>';
        ?>
        '
        '
        '
        '
        '
        echo '</form>'   // Form END

В приведенном выше коде и в рабочий пример в 1-й строке есть кнопка Вставить азбуку. При нажатии этой кнопки форма должна автоматически принимать общие данные следующим образом:

Title (EN): Good Morning.
Title (FR): Bonjour
Description (EN): Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
Description (FR): Dans la bibliothèque des composants se trouvent le composant Texte modèle qui vous pouvez faire glisser sur le plan de dessin.
Program: ABC (ID#6)


Постановка задачи: Мне интересно, какие изменения я должен внести в приведенный выше php-код, чтобы при нажатии кнопки «Вставить ABC» заполнялись следующие значения.

Поведение ключевого слова "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) для оценки ваших знаний,...
4
0
170
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы должны использовать JavaScript для этого.

Добавьте «onClick» к кнопке, которая вызывает функцию. В функции установите значение этих входов.

Выглядит хорошо. Похоже, что jsfiddle терпит неудачу из-за ошибки jquery, не уверен, почему это так, но похоже на проблему jsfiddle. Вот код в Codepen: codepen.io/anon/pen/YgYevX?editors=1010 Единственное изменение, которое я сделал, это изменить вашу кнопку, чтобы использовать элемент «кнопка» вместо «а» (и удалить «роль = 'кнопка'»)

Alan P. 13.03.2019 19:50

У меня есть еще один вопрос. Это не похоже. Мне интересно, можете ли вы взглянуть.

john 13.03.2019 23:12

Если ваш вывод исходит из PHP, просто добавьте эту дополнительную строку в тег script. Так:

<script>
document.getElementsByClassName("ABC-Fill")[0].addEventListener("click",function(){
    let yourForm = document.getElementById("myform");
  yourForm.title_en.value = "Good morning.";
  yourForm.title_fr.value = "Bonjour";
  yourForm.description_en.value = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.";
  yourForm.description_fr.value = "Dans la bibliothèque des composants se trouvent le composant Texte modèle qui vous pouvez faire glisser sur le plan de dessin.";
    yourForm.program_id.value = 6;
});
</script>

Кроме того, дайте вашей кнопке определенный класс для работы с ней (например, class="ABC-Fill"), например:

<a class = "btn btn-primary ABC-Fill" style = "float:right;" role = "button">Insert ABC</a>

Вот ваша рабочий пример с работающим кодом:

https://jsfiddle.net/yw3c2xau/

Возможно, вы можете сгенерировать атрибуты data-x, а затем заполнить входные значения этими данными.

HTML:

<form>
  First: <input data-default = "First def" class = "put-def" type = "text"/>
  Second: <input data-default = "Second def" class = "put-def" type = "text"/>
</form>
<button onClick = "fill();">
Fill!
</button>

JS, например, с JQuery:

function fill(){
    $(".put-def").each(function(){
        $(this).val($(this).data('default'));
    });
}

Рабочий пример: https://jsfiddle.net/fh1xapru/10/

Мне нравится идея задавать значение по умолчанию для каждой строки в атрибуте данных, но я рекомендую использовать тот же атрибут данных для селектора jquery. Мое эмпирическое правило: классы css предназначены для применения стилей, идентификаторы и атрибуты данных — для применения функциональности., т.е. $("[data-default]").each(...)

santiago arizti 13.03.2019 19:11

Может быть :P Я не очень хорошо разбираюсь в рекламе, так что это тоже хороший совет для меня.

Rallyholic 13.03.2019 19:12

В вашем jsfiddle вы использовали document.getElementsByName, и он возвращает NodeList[], а не элемент. Возможно, вам придется использовать document.getElementById, чтобы этот код работал.

<a class = "btn btn-primary" onclick = "myFunction()" style = "float:right;" role = "button">Insert ABC</a>

function myFunction() {
 document.getElementById("title_en").value = "Good Morning";
 document.getElementById("title_fr").value = "Bonjour";
 document.getElementById("description_en").value = "Bonjour";
 document.getElementById("description_fr").value = "Bonjour";
 document.getElementById("program_id").value = "6";

}

проверьте мою обновленную скрипку в ответе Алана П.. Я отправил это 25 минут назад.

john 13.03.2019 19:06

Хорошо, я видел скрипку. В теория должно работать. Проблема в том, что JS Fiddle упаковывает код js в область, в которой ваша форма не может его найти.

Если вы откроете консоль, то увидите сообщение «функция myFunction не существует». И если вы посмотрите, как JS Fiddle отрисовывает ваш код, вы увидите, что function myFunction () находится внутри другой функции, что помещает его НЕ в глобальную область видимости, недоступную для любого элемента html.

Если вам нужна рекомендация, я бы немного изменил html. так:

Удалите onclick = "myFunction()" из html и вместо этого добавьте идентификатор этой кнопки.

<button id = "btn-to-apply-defaults">...

Реструктурируйте функцию, чтобы она выглядела следующим образом:

document.getElementById("btn-to-apply-defaults").addEventHandler("click", function () {
    // here go the contents of the original myFunction()
});

Это то, что некоторые назвали бы «ненавязчивым» js, что означает, что js не привязан к элементам непосредственно в самом элементе html, вместо этого вы привязываете событие впоследствии.

Если это все еще не работает, это связано с тем, что кнопка может еще не существовать в DOM, когда вы выполняете getElementById. Это связано с тем, что JS Fiddle вставляет скрипт над в html. У вас есть два варианта:

  1. скажите JS Fiddle, чтобы он поместил js в конец файла (см. раскрывающийся список над редактором js)
  2. привяжите элемент следующим образом (пример с jquery):
$(document).on("click", "#btn-to-apply-defaults", function () {
    // here go the contents of the original myFunction()
});

Событие привязано к самому document, которое обязательно существует в этот момент, но срабатывает только тогда, когда «currentTarget» равно #btn-to-apply-defaults

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