RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1406089
Accepted
amarok36
amarok36
Asked:2022-07-03 16:34:04 +0000 UTC2022-07-03 16:34:04 +0000 UTC 2022-07-03 16:34:04 +0000 UTC

为什么 .append 只添加一次块?jQuery

  • 772

通过单击#add-button表格,应该会出现#to-do-list一个带有卡片的块,其中包含来自input和表格的数据。textarea下次单击下面的按钮时,应该会出现一个新块,依此类推。该块只出现一次。再次填写表格时,不会出现新块,第一个创建的数据块中的数据只是更改。如何实现新块的出现?

document.querySelector('form').addEventListener('submit', (e) => e.preventDefault()); // Чтобы страница не перезгружалась в Code Snippet-е

$(function() {

  let tmp = `<div class="case">
            <div class="case-title">
            <span></span>
            <div class="clear-button"></div></div>
            <div class="case-body"></div>
         </div>`; // вид карточки

  $('#add-button').on('click', function() {
    let h_val = $('#name-field-input').val().trim(), // значение поля из input
      d_val = $('#description-field').val().trim(); // тоже самое из textarea

    if (h_val.length > 0 && d_val.length > 0) {
      tmp = $(tmp);
      tmp.find('.case-title > span').text(h_val); // вставим в карточку заголовок
      tmp.find('.case-body').text(d_val); // тоже самое с описанием

      $('.fixed-container #to-do-list').append(tmp); // далее добавляем новую карточку 
    }

  });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div class="fixed-container">
  <div id="to-do-list">
    <div class="heading">Список дел:</div>
    <div class="case">
      <div class="case-title">
        <span>Новое дело 1 </span>
        <div class="clear-button"></div>
      </div>
      <div class="case-body">Пример описания</div>
    </div>
    <div class="case">
      <div class="case-title">
        <span>Новое дело 2</span>
        <div class="clear-button"></div>
      </div>
      <div class="case-body">Пример описания</div>
    </div>
  </div>
  <div id="new-case">
    <div class="heading">Добавить новое дело</div>
    <div class="case">
      <form method="post">
        <label for="name-field">* Название</label>
        <input required="required" id="name-field-input" type="text" name="name-field">
        <label for="description-field">* Описание</label>
        <textarea required="required" id="description-field" name="description-field"></textarea>
        <button id="add-button">Добавить дело</button>
      </form>
    </div>
  </div>
</div>

javascript
  • 2 2 个回答
  • 83 Views

2 个回答

  • Voted
  1. Best Answer
    EzioMercer
    2022-07-03T17:39:45Z2022-07-03T17:39:45Z

    如果您只需要在模板中插入文本,那么我建议一个更简单、更可靠的选项:

    document.querySelector('form').addEventListener('submit', (e) => e.preventDefault()); // Чтобы страница не перезгружалась в Code Snippet-е
    
    $(function() {
    
      const tmp = (titleText, bodyText) => `<div class="case">
                <div class="case-title">
                <span>${titleText}</span>
                <div class="clear-button"></div></div>
                <div class="case-body">${bodyText}</div>
             </div>`; // Карточка
    
      $('#add-button').on('click', function() {
        const h_val = $('#name-field-input').val().trim(), // значение поля input
          d_val = $('#description-field').val().trim(); // значение поля textarea
    
        if (h_val.length > 0 && d_val.length > 0) {
          $('.fixed-container #to-do-list').append(tmp(h_val, d_val)); // Добавляем новую карточку 
        }
    
      });
    
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <div class="fixed-container">
      <div id="to-do-list">
        <div class="heading">Список дел:</div>
        <div class="case">
          <div class="case-title">
            <span>Новое дело 1 </span>
            <div class="clear-button"></div>
          </div>
          <div class="case-body">Пример описания</div>
        </div>
        <div class="case">
          <div class="case-title">
            <span>Новое дело 2</span>
            <div class="clear-button"></div>
          </div>
          <div class="case-body">Пример описания</div>
        </div>
      </div>
      <div id="new-case">
        <div class="heading">Добавить новое дело</div>
        <div class="case">
          <form method="post">
            <label for="name-field">* Название</label>
            <input required="required" id="name-field-input" type="text" name="name-field">
            <label for="description-field">* Описание</label>
            <textarea required="required" id="description-field" name="description-field"></textarea>
            <button id="add-button">Добавить дело</button>
          </form>
        </div>
      </div>
    </div>

    我还记得我们还有一个模板标签。您通常可以从 JS 中删除模板:

    document.querySelector('form').addEventListener('submit', (e) => e.preventDefault()); // Чтобы страница не перезгружалась в Code Snippet-е
    
    $(function() {
    
      const tmp = (titleText, bodyText) => {
        const template = $('#template-case').contents().clone(true);
        
        template.find('.case-title-text').html(titleText);
        template.find('.case-body').html(bodyText);
        
        return template;
      }; // Карточка
    
      $('#add-button').on('click', function() {
        const h_val = $('#name-field-input').val().trim(), // значение поля input
          d_val = $('#description-field').val().trim(); // значение поля textarea
    
        if (h_val.length > 0 && d_val.length > 0) {
          $('.fixed-container #to-do-list').append(tmp(h_val, d_val)); // Добавляем новую карточку 
        }
    
      });
    
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <div class="fixed-container">
      <div id="to-do-list">
        <div class="heading">Список дел:</div>
        <div class="case">
          <div class="case-title">
            <span>Новое дело 1 </span>
            <div class="clear-button"></div>
          </div>
          <div class="case-body">Пример описания</div>
        </div>
        <div class="case">
          <div class="case-title">
            <span>Новое дело 2</span>
            <div class="clear-button"></div>
          </div>
          <div class="case-body">Пример описания</div>
        </div>
      </div>
      <div id="new-case">
        <div class="heading">Добавить новое дело</div>
        <div class="case">
          <form method="post">
            <label for="name-field">* Название</label>
            <input required="required" id="name-field-input" type="text" name="name-field">
            <label for="description-field">* Описание</label>
            <textarea required="required" id="description-field" name="description-field"></textarea>
            <button id="add-button">Добавить дело</button>
          </form>
        </div>
      </div>
    </div>
    
    <template id="template-case">
      <div class="case">
        <div class="case-title">
          <span class="case-title-text"></span>
          <div class="clear-button"></div>
        </div>
        <div class="case-body"></div>
      </div>
    </template>

    确实,IE 不支持这个,但是这样 JS 可以摆脱 HTML 代码。是的,就我而言,在 html 文件中编辑 HTML 比在 JS 中方便得多,无论 IDE 如何尝试建议它:)

    • 1
  2. Алексей Шиманский
    2022-07-03T16:42:27Z2022-07-03T16:42:27Z

    你可以试试

    tmp = $(tmp);
    

    写

    tmp = $(tmp).clone();
    

    但它仍然很可能会出错


    应该改写

    tmp = $(tmp);
    

    像这样:

    let localTemplate =  $(tmp);
    

    并继续与localTemplate

    因为 你最终会覆盖变量tmp

    • 0

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5