Datepicker& replaceWith()后无法自动完成

时间:2013-12-19 13:17:24

标签: jquery jquery-ui autocomplete datepicker replacewith

我在datepicker / autocomplete和replacewith()之间遇到了一个愚蠢的问题。我有一个表单,用户可以在其中添加多行并删除它们。为了做到这一点,我已经设置了一个克隆。一旦克隆完成,我做一个replaceWith()以更改输入的名称,因为attr函数通过用SubmitName替换名称来使IE变得愚蠢。

replacewith工作正常,但是datepicker功能或自动完成功能不再起作用。仅供参考,这个块就在HTML表单之后。我已经尝试了几种方式,如下所示,但没有效果:

<script type="text/javascript">
var uniqueLeg = 1;
$('.addLeg').click(function() {
    var copy = $('#Leg').clone(true,true);
    var formId = 'Leg' + window.uniqueLeg;
    copy.attr('id', formId );
    copy.removeAttr('style');

    copy.find(':input#tripdate').each(function() {
        $(this).replaceWith("<input type='" + $(this).attr("type") + "' id='tripdate" + window.uniqueLeg + "' name='" + $(this).attr("name") + window.uniqueLeg + "' class='datepicker' />");
        $('.datepicker').datepicker({ dateFormat: "dd/mm/yy" });
    });
$('#trip').append(copy);
window.uniqueLeg++;
});

    copy.find(':input#tripdate').each(function() {
        $(this).replaceWith("<input type='" + $(this).attr("type") + "' id='tripdate" + window.uniqueLeg + "' name='" + $(this).attr("name") + window.uniqueLeg + "' class='datepicker' />");
        $(this).datepicker({ dateFormat: "dd/mm/yy" });
    });

    copy.find(':input#tripdate').each(function() {
        $(this).replaceWith("<input type='" + $(this).attr("type") + "' id='tripdate" + window.uniqueLeg + "' name='" + $(this).attr("name") + window.uniqueLeg + "' class='datepicker' />");
        $('tripdate'+window.uniqueLeg).datepicker({ dateFormat: "dd/mm/yy" });
    });

无效。 jquery-ui在页面顶部声明

<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <TITLE> Dev page </TITLE>
    <link rel="stylesheet" href="src/jquery-ui.css" />
    <script src="src/jquery-1.9.1.js"></script>
    <script src="src/jquery-ui.js"></script>
    <SCRIPT language="javascript">
$(function() {
            $( ".datepicker" ).datepicker({ dateFormat: "dd/mm/yy" });
            $( ".aptsearch" ).autocomplete({source:'suggest_apt.php', minLength:3});
            $( ".actsearch" ).autocomplete({
                source:'suggest_act.php', 
                minLength:3,
                select: function (event, ui) { 
                    var id = $(this).attr("id");
                    loadAC(ui.item.value, id); 
                }
            });
        });...

除此之外,即使是addClass或RemoveClass函数似乎也不起作用。请指教,我看不出有什么遗漏。 欢迎提出建议。

新闻行之前的html结构

<INPUT id=tripdate0 class="datepicker hasDatepicker" name=tripdate0 jQuery191007588717778684739="15"> 
新闻行后

<INPUT id=tripdate1 class=datepicker name=tripdate1>

1 个答案:

答案 0 :(得分:0)

好的,我发现问题是什么。 AddClass和.datepicker无法处理输入id已被replacewith更改的函数。 解决此问题的唯一方法是在之后添加一个附加函数,选择新修改的输入并添加类datepicker + initialize .datepicker()

看起来有点脏,但至少起作用。如果您有一些改进建议,请随时分享:)

    copy.find(':input#tripdate'+window.uniqueLeg).each(function() {
        $(this).addClass('datepicker');
        $(this).datepicker({ dateFormat: "dd/mm/yy" });
    });