代码之家  ›  专栏  ›  技术社区  ›  Enrique

jQuery。将选择器应用于动态表单中的每个字段

  •  0
  • Enrique  · 技术社区  · 15 年前

    我有一个使用jQuery插件动态构建的表单

    http://code.google.com/p/jquery-dynamic-form/
    

    当我复制一个 div ,中的所有字段 是重复的,并且-作为插件文档状态- 添加到字段名中

    我也使用jQueryUI。我使用datePicker插件

    $("#myDynDateField").datepicker();
    

    当此datePicker字段只有一个实例时,它可以正常工作。当我复制整个div时,datePicker字段也被复制,并且错误开始出现

    
    inst is undefined
    uncaught exception: Missing instance data for this datepicker  
    
    


    提前多谢了,

    2 回复  |  直到 15 年前
        1
  •  0
  •   Alex Sexton    15 年前

    $.clone() “复制”元素,但如果是,问题可能源于传入 true 旗帜例如 $('div#id').clone(true)

    很可能,尽管您并没有用这种粒度控制它。或多或少,您会遇到问题,因为jqueryui不知道这些重复的表单字段。我建议删除datepicker字段的“复制”版本,并将其替换为新的datepicker字段。

    // code to duplicate form
    // ...
    // Now replace the element with one just like it but without any events
    $('#newDupedForm')
        .find('.datefield')
        .replaceWith(
            $(this).clone(false).datepicker(options)
        );
    

    这应该去掉从另一个元素到旧jQueryUIDatePicker的任何链接,并实例化一个新的,但是如果我缺少什么,您可以从头开始创建输入元素并执行以下操作: replaceWith

        2
  •  0
  •   Zack Katz    14 年前

    当我实施这些建议时,它开始对我起作用 in this thread :

    $('input.hasDatepicker', $clone).removeClass('hasDatepicker');
    

    如果你正在使用 $.slideDown ,似乎有必要在幻灯片完成后执行此操作,如下所示:

    $clone.slideDown(function() { 
        $('input.hasDatepicker', $clone).removeClass('hasDatepicker');
    });