【问题标题】:how to change id per form in select2 django formset如何在select2 django formset中更改每个表单的id
【发布时间】:2020-11-03 15:37:51
【问题描述】:

我需要为每个表单增加 id 字段表单

django 提供的默认 id 是id_formsetname_set-0-fieldName 和 0 一个一个递增

在我的例子中名为id_items_set-0-model,第二种形式是id_items_set-1-model,它显示在浏览器的检查元素源代码中,我将它用于 loo 脚本

for (var i = 0; i < 10; i++){
    $("#id_items_set-"+i+"-model").select2();
 }

但只适用于第一种形式,我不想使用 django-select2

我的模板是这样的

这是我的sn-p

<tbody class="tbody tb1 " id="form_set">
                    
                    {% for item in items.forms %}
                    <tr class="p-0 col-12">                    
                 <td class="">
                  <div class="col-12 p-0 mt-3 inp">
                {{item.price | add_class:'col-12 '}}
                
             </div>
             </td>
                
            <td class="">
            <div class="col-12 p-0 mt-3 inp">    
                 {{item.quantity | add_class:'col-12 '}}
            </div>
           </td>
            <td class="">
               <div class="col-12 p-0 mt-3 inp">
                {{item.model | add_class:'col-12 0model model' | attr:'id:id_items_set-0-model'}}
                                
                            </div>
                        </td>
                    </tr>
                    {% endfor %}
                </tbody>
                
<script type="text/javascript">
    $(function(){
        $('.tb1 tr:last').formset({
            prefix:'{{items.prefix}}',
            addText:'add',
            deleteText:'remove',
            addCssClass:'btn btn-success',
        });
    })
</script>

<script type="text/javascript">
        $(document).ready(function(){
            for (var i = 0; i < 10; i++){
                 $("#id_items_set-"+i+"-model").select2();
  }            
 })
</script>

仅适用于我的第一个表单,然后对其他表单没有任何影响?请问我在脚本部分做错了什么吗?

【问题讨论】:

    标签: javascript html django jquery-select2


    【解决方案1】:

    jquery.formset 具有added 属性,我们可以在每次创建行时调用一个函数

    <script type="text/javascript">
    $(function(){
        $('.tb1 tr:last').formset({
            prefix:'{{items.prefix}}',
            addText:'add',
            deleteText:'remove',
            addCssClass:'btn btn-success',
            added:function($row){
                      $('.model').select2()
                  }
          });
       })
    </script>
    

    【讨论】:

      【解决方案2】:

      我从未在 django 上工作过。 你能试试这个吗? 如果您可以与我们分享一个真实示例的链接,以防万一这不起作用

       $(()=>{
           let ids = document.querySelectorAll("[id=*'id_items_set']");
           ids.forEach((element)=>{
          $(element).select2();
          });
           });
      

      【讨论】:

      • 它说 (Uncaught DOMException: Failed to execute 'querySelectorAll' on 'Document': '[id=*'id_items_set']' is not a valid selector.
      • $(()=> 是什么意思?!
      • 这意味着没有包含这部分 id 的元素。
      • 试试 settimeout(function(){let ids = document.querySelectorAll("[id=*'id_items_set']"); ids.forEach((element)=>{ $(element).select2 (); });},3000);如果它有效,则意味着您甚至在 dom 中存在之前就尝试调用元素
      • 这意味着您不会使用想要的 id 创建元素
      猜你喜欢
      • 2021-10-10
      • 2020-09-16
      • 2019-04-15
      • 2018-07-23
      • 2014-12-07
      • 1970-01-01
      • 2018-09-21
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多