【问题标题】:Clone div jQuery UI Datepicker issue克隆 div jQuery UI Datepicker 问题
【发布时间】:2013-04-26 10:05:41
【问题描述】:

我有一个 div,其中包含一些可以克隆到另一个 div 中的字段。其中一个字段使用 datepicker ui。但是,当我去克隆 div 时,日期选择器停止为克隆的输入工作。我已经使用并编辑了 this question 的以下内容,但没有运气

HTML:

<div class="add-child">
    <input type="text" class="child_dob" name="child_dob" id="child_dob" />
</div>
<button type="button" id="add_child">Add another child</button>

jQuery:

/* CLONE CODE */
$(function() {
    $('#add_child').click( function(){  
     var clone = $('.add-child:first').clone();
     clone.appendTo('#child');
     $(":input").each(function (i) { $(this).attr('tabindex', i + 1); });
    });
});

我真的不明白我哪里出了问题。任何帮助将不胜感激

编辑:

HTML:

<table class="portrait-table add-child">
            <tr>
                <th colspan="6"><strong>Children details</strong></th>
            </tr>
            <tr>
                <th>Name</th><td><input type="text" class="child_name" name="child_name" value="<?php echo set_value('child_name'); ?>" /></td><td><?php echo form_error('child_name') ?></td>
            </tr>
            <tr>
                <th>Relationship to you</td>
                <td><select class="child_relation" name="child_relation">
                        <option value="Son">Son</option>
                        <option value="Daughter">Daughter</option>
                        <option value="Other">Other</option>
                    </select>
                </td>
                <td><?php echo form_error('child_relation') ?></td>
            </tr>
            <tr>
                <th>Age</th><td><input type="text" class="child_age" name="child_age" value="<?php echo set_value('child_age'); ?>" /></td><td><?php echo form_error('child_age') ?></td>
            </tr>
            <tr>
                <th>DoB</th><td><input type="text" class="child_dob" name="child_dob" value="<?php echo set_value('child_dob'); ?>" /></td><td><?php echo form_error('child_dob') ?></td>
            </tr>
            <tr>
                <th>Gender</th>
                <td><select class="child_gender" name="child_gender">
                        <option value="Male">Male</option>
                        <option value="Female">Female</option>
                    </select>
                </td>
                <td><?php echo form_error('child_gender') ?></td>
            </tr>
            <tr>
                <th>Ethnicity</th>
                <td><select class="child_ethnicity" name="child_ethnicity">
                        <option>Ethnicity</option>
                        <option value="White British">White British</option>
                        <option value="White Irish">White Irish</option>
                        <option value="Traveller">Traveller</option>
                        <option value="Gypsy/Roma">Gypsy/Roma</option>
                        <option value="Any other White Background">Any other White Background</option>
                        <option value="Black Caribbean">Black Caribbean</option>
                        <option value="Black African">Black African</option>
                        <option value="Any other Black Background">Any other Black Background</option>
                        <option value="Indian">Indian</option>
                        <option value="Bangladeshi">Bangladeshi</option>
                        <option value="Chinese">Chinese</option>
                        <option value="Mixed Background">Mixed Background</option>
                        <option value="Any other Asian Background">Any other Asian Background</option>
                        <option value="Any Other Ethnic Group">Any Other Ethnic Group</option>
                        <option value="Not given">Not given</option>
                    </select>
                </td>
                <td><?php echo form_error('child_ethnicity') ?></td>
            </tr>
            <tr>
                <th>School</th>
                <td>
                    <select class="child_school" name="child_school">
                        <option value="Southwick Community Primary School">Southwick Community Primary School</option>
                        <option value="Valley Road Community Primary School">Valley Road Community Primary School</option>
                        <option value="Diamond Hall Junior School">Diamond Hall Junior School</option>
                        <option value="Highfield Primary School">Highfield Primary School</option>
                        <option value="Usworth Colliery Primary School">Usworth Colliery Primary School</option>
                        <option value="Hetton Primary School">Hetton Primary School</option>
                        <option value="Hetton Lyons Primary School">Hetton Lyons Primary School</option>
                        <option value="Other">Other</option>
                        <option value="N/A">N/A</option>
                    </select>
                </td>
                <td><?php echo form_error('child_school') ?></td>
            </tr>
        </table>
        <div id="child"></div>

        <p><button type="button" id="add_child">Add another child</button></p>

jQuery(我需要每个字段名都附加_additional):

$(function() {
$('#add_child').click( function(){  
    var clone = $('.add-child:first').clone(true).appendTo('#child');
     clone.find("input").val("");
     clone.find(".child_name").attr('name', 'child_name_additional[]');
     clone.find(".child_relation").attr('name', 'child_relation_additional[]');
     clone.find(".child_age").attr('name', 'child_age_additional[]');
     clone.find(".child_dob").attr('name', 'child_dob_additional[]');
     clone.find(".child_gender").attr('name', 'child_gender_additional[]');
     clone.find(".child_ethnicity").attr('name', 'child_ethnicity_additional[]');
     clone.find(".child_school").attr('name', 'child_school_additional[]');

     $(":input").each(function (i) { $(this).attr('tabindex', i + 1); });
});

});

【问题讨论】:

  • 您是否尝试过将所有代码放入文档中准备好?我的意思是文档下面的第二个代码准备好了,准备好看看是否有帮助。
  • 是的,我现在已经这样做了,我的错误。我现在已经克隆了元素并且日期选择器正在显示,但它总是将日期添加到第一个输入中

标签: jquery jquery-ui jquery-ui-datepicker


【解决方案1】:

有几件事供您参考:

  • 看起来您的第二个代码块在$(document).ready(function()) 之外。
  • var myDiv 是您的按钮,它没有子按钮。
  • 当您的输入被克隆时,您会得到重复的child_dob id。

至于让日期选择器处理克隆的输入,这应该可以解决问题:

$('#add_child').click(function() {  
    var clone = $('.add-child:first').clone(true).appendTo('#child');
    clone.find('.child_dob').datepicker();
});

Here's a simplified example fiddle


编辑

既然您已经添加了完整的代码,我了解您的问题所在。在您的问题中,您没有提到您已经将datepicker 分配给原始.child_dob。有点乱,不过需要把克隆的元素中的datepicker去掉,然后重新添加:

换行:

clone.find(".child_dob").attr('name', 'child_dob_additional[]');

与:

clone.find(".child_dob").removeClass('hasDatepicker').removeAttr('id')
                        .datepicker().attr('name', 'child_dob_additional[]');

Here's another fiddle

【讨论】:

  • 日期选择器现在正在购物,但是当我选择日期时,它会更改我克隆的原始输入的值。有什么想法吗?
  • 顺便说一句,您可以删除整个第二块代码。你不需要它。
  • 它仍在做同样的事情。由于第一个和第二个输入具有相同的类,因此它不适用于克隆的输入。我已经删除了第二个代码块,因为您的示例是迄今为止我最接近的解决方案..
  • 他们有相同的类并不重要。为每个 clone 分配一个新的唯一日期选择器。您是否从child_dob 输入中删除了id
  • 我已经更新了我的答案,有不止一个字段被克隆了我仍然不明白为什么它不起作用!
【解决方案2】:

在添加元素后尝试调用 datepicker

clone.appendTo('#child').datepicker();

【讨论】:

    【解决方案3】:

    检查这个fiddle

    var clone = $('.add-child input:first').removeClass('hasDatepicker')
      .removeData('datepicker').clone();
            var newCloneId="child_dobx_"+(child_count+1);
            clone.attr("name",newCloneId).attr("id",newCloneId).appendTo('#add-child');
    

    我尝试删除克隆上的 datepicker 类和数据,然后附加它。 这是工作。检查这是否是必需的。

    【讨论】:

    • 现在需要克隆的字段不止一个。我已经更新了我的问题,因为它似乎仍然不起作用:(
    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2016-07-25
    • 2011-01-28
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多