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

重复jquery用户界面问题

  •  3
  • jargalan  · 技术社区  · 14 年前

    我在做一个Django项目。但我的问题是jquery。 我用过 jquery.formset.js jquery插件,用于在内联表单集、表单集工厂中动态添加表单。这个很好用。它将第一行元素与其其他装饰标记(如DIV、SPAN、IMG等)重复,并将新行添加到表的底部。所以复制的行可以像原点一样出现。

    我也用 jquery ui (datepicker, autocomplete..etc) 以我的形式。

    复制复制复制了所有内容,甚至是日期选择器和自动完成的附加HTML,因为插件试图不留下任何接口。当它克隆第一行时,所有内容都会被克隆,甚至事件也会被克隆。所以当我点击新出现的日期选择器输入时,日历事件在第一行的元素上工作。

    我正在努力找到决定。以下是迄今为止我所想的……

    1. 将jquery UI(datepicker和autocomplete)声明为 居住 ?喜欢

      $(“.dates”).live(“…”,function()$(this).datepicker();)

      但我不确定应该处理哪个事件。我想处理新创建的或附加的元素是不可能的。

    2. 把脚本放在行中?就在元素之后

      $(“id_birthday_1”).datepicker();

      这似乎是最好的主意,但复制已经复制了额外的元素/htmls。所以它将重新渲染元素。

    3. 我应该编辑JS插件吗?像绑定所有jquery ui的事件声明一样,除了渲染、附加和样式。那将是一个巨大的混乱。我不想把事情搞砸……每次我需要添加一个新的UI时,我都应该不断地编辑JS。

    alt text

    每一个想法都会受到赞赏:)

    3 回复  |  直到 14 年前
        1
  •  3
  •   Bernhard Vallant    14 年前

    表单集插件可以在添加新表单时调用函数,您可以在那里初始化新添加的字段。函数应采用单个参数, row ;它将传递一个jquery对象,包装刚刚添加的表单。

    $('#myFormset1Table tbody tr').formset({
        added: function(row) {
           row.find(".date").datepicker(); 
        }
    });
    
        2
  •  4
  •   erjiang    14 年前

    你的第一个想法很好。

    1. 给所有的日期选择者一个类来识别他们。
    2. 全部克隆。
    3. 然后 ,使用jquery将它们转换为日期选择器 each 功能:

    .

    $(".dates").each(function (i) {
        $(this).datepicker();
    }
    

    所以基本上,在激活日期选择器之前复制所有元素。jquery的 每个 允许您在一个步骤中激活整个元素列表。

    编辑: 如果需要动态生成新的克隆,可以将行的HTML存储在变量中。当用户添加行时,可以执行以下操作:

    $(".date", $(rowHTML).appendTo($("#my-form-fields"))).datepicker();
    

    它将新行添加到表单中,然后初始化该行的日期选择器。

    编辑2: 上述代码相当于

    $(rowHTML).appendTo($("#my-form-fields")).find(".date").datepicker();
    
        3
  •  1
  •   fncomp    14 年前

    你可以听听 onSelect 甚至可能
    $('.dates').focus(index){ $($('.dates')[index]) //etc. }