HTML Форма дублируется каждый раз, когда я нажимаю jQuery .append - PullRequest
3 голосов
/ 10 апреля 2020

Я пытаюсь создать форму с одним полем ввода для задачи пользователя и 3 вариантами выбора часа, минуты и AM / PM задачи. Я хочу создать кнопку, которая добавит такую ​​же форму под ней, чтобы пользователь мог ввести другую задачу с такими же точными полями. Проблема в том, что всякий раз, когда я использую функцию добавления jQuery на кнопке, она удваивает добавление формы. Как сделать так, чтобы форма генерировалась только один раз после нажатия кнопки пользователем? Ниже мой код для формы и Javascript:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<form method="post">
        <div class="form-group" style="text-align:center">
            <h4>Task</h4>
            <input type="text" class="form-control" placeholder="Task" name="taskname" required>
        </div>
        <br>
        <div class="form-group">
            <h4 style="text-align:center">What time do you want me to remind you about this task?</h4>
                <center>
                    <select name="remind_endtime_hour" required>
                        <option value="00">00</option>
                        <option value="01">01</option>
                        <option value="02">02</option>
                        <option value="03">03</option>
                        <option value="04">04</option>
                        <option value="05">05</option>
                        <option value="06">06</option>
                        <option value="07">07</option>
                        <option value="08">08</option>
                        <option value="09">09</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                    </select>

                    <select name="remind_endtime_minute" required>
                        <option value="00">00</option>
                        <option value="01">01</option>
                        <option value="02">02</option>
                        <option value="03">03</option>
                        <option value="04">04</option>
                        <option value="05">05</option>
                        <option value="06">06</option>
                        <option value="07">07</option>
                        <option value="08">08</option>
                        <option value="09">09</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        <option value="18">18</option>
                        <option value="19">19</option>
                        <option value="20">20</option>
                        <option value="21">21</option>
                        <option value="22">22</option>
                        <option value="23">23</option>
                        <option value="24">24</option>
                        <option value="25">25</option>
                        <option value="26">26</option>
                        <option value="27">27</option>
                        <option value="28">28</option>
                        <option value="29">29</option>
                        <option value="30">30</option>
                        <option value="31">31</option>
                        <option value="32">32</option>
                        <option value="33">33</option>
                        <option value="34">34</option>
                        <option value="35">35</option>
                        <option value="36">36</option>
                        <option value="37">37</option>
                        <option value="38">38</option>
                        <option value="39">39</option>
                        <option value="40">40</option>
                        <option value="41">41</option>
                        <option value="42">42</option>
                        <option value="43">43</option>
                        <option value="44">44</option>
                        <option value="45">45</option>
                        <option value="46">46</option>
                        <option value="47">47</option>
                        <option value="48">48</option>
                        <option value="49">49</option>
                        <option value="50">50</option>
                        <option value="51">51</option>
                        <option value="52">52</option>
                        <option value="53">53</option>
                        <option value="54">54</option>
                        <option value="55">55</option>
                        <option value="56">56</option>
                        <option value="57">57</option>
                        <option value="58">58</option>
                        <option value="59">59</option>
                    </select>

                    <select name="remind_endtime_AM_PM" required>
                        <option value="AM">AM</option>
                        <option value="PM">PM</option>
                    </select>
                    <hr>
                </center>
        </div>
    </form>
    <center><a href="#" id="addMore">+ Add Another Task</a></center>
    <br>
    <br>
    <center><input class="btn btn-primary" type="submit" name="submit" value="Submit" style="width: auto; height: auto; font-size: 25px; text-align: center;" required></center>
</body>

Javascript

<script>
    jQuery("#addMore").click(function(){
        var contents = jQuery("form").html();
        jQuery('form').append(contents);
    });
</script>

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Вы можете использовать one() метод для прослушивания только один раз.

 jQuery("#addMore").one('click', function(){
    // .....
 });

ОБНОВЛЕНИЕ 1: Он дублирует существующие элементы формы, поэтому во второй раз он будет дублировать ранее добавленные элементы также. Поэтому для исправления кеша HTML в переменной.

var contents = jQuery("form").html();

jQuery("#addMore").click(function(){
    jQuery('form').append(contents);
});

ОБНОВЛЕНИЕ 2: Для добавления кнопки удаления просто оберните элементы в элемент div и сохраняйте закрытие кнопка внутри него. Привязать обработчик события click для кнопки, чтобы удалить только что добавленный раздел формы.

var contents = `<div> <button class="remove" type="button">X<button>
                 ${jQuery("form").html()}
                </div>`;

jQuery("#addMore").click(function(){
    jQuery('form').append(contents);
});

// listener for remove button, with help of event delegation
jQuery('form').on('click', '.remove',function(e){
    e.preventDefault();
    $(this).parent().remove();
});
1 голос
/ 10 апреля 2020

Если вы хотите добавлять одну и ту же форму каждый раз, когда нажимаете на кнопку, вам нужно немного изменить ее jQuery code

<script>
var contents = jQuery("form").html();
    jQuery("#addMore").click(function(){

        jQuery('form').append(contents);
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...