【问题标题】:html - javascript not working in dynamic generated html formhtml - javascript 不能在动态生成的 html 表单中工作
【发布时间】:2015-02-28 22:03:17
【问题描述】:

通过“添加行”按钮动态生成的表格中的行。

行中的一个字段是 Date,它使用 datepicker 来选择日期。

问题:

当行动态生成时,日期选择器不显示。

我正在使用引导程序 3。

这是在按钮单击时生成表格行的代码。

    function addRow(tableID) {
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    if(rowCount < 40){                            // limit the user from creating fields more than your limits
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;
        for(var i=0; i<colCount; i++) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
        }
    }else{
        alert("Maximum Players per Entry is 40");

    }
}

日期输入的 HTML 标记:

     <div class="form-group">
 <label for="InputDatePicker">Date:</label>
  <input type="text" class="form-control" placeholder="Select Date" id="InputDatePicker">
 </div>

JAVASCRIPT 在输入时调用 datepicker 函数

<script>
$('#InputDatePicker').datepicker();
</script>

更新代码以添加新行并初始化日期选择器

function addRow(tableID) {
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    if(rowCount < 40){                            // limit the user from creating fields more than your limits
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;
        for(var i=0; i<colCount; i++) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
        }
        $('#InputDatePicker').datepicker();
    }else{
        alert("Maximum Players per Entry is 40");

    }
}

【问题讨论】:

    标签: javascript jquery html twitter-bootstrap


    【解决方案1】:

    大概您的意思是您使用的是the jQuery UI Datepicker plugin? (或类似的东西?)在这种情况下,您永远不会在动态添加的元素上初始化插件:

    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;
    for(var i=0; i<colCount; i++) {
        var newcell = row.insertCell(i);
        newcell.innerHTML = table.rows[0].cells[i].innerHTML;
    }
    

    听起来您正在成功地向页面添加新元素。但是一旦添加了这些元素,您需要定位应该是 Datepicker 的元素并在这些元素上初始化插件:

    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;
    for(var i=0; i<colCount; i++) {
        var newcell = row.insertCell(i);
        newcell.innerHTML = table.rows[0].cells[i].innerHTML;
    }
    $(someSelector).datepicker();
    

    someSelector 的值完全取决于你,我不知道你的标记。但想法是,您需要唯一标识需要成为 Datepicker 的新添加元素。页面加载时初始化插件只会初始化当时存在的元素,不会初始化以后添加的元素。


    更新:

    根据您的 jQuery 选择器:

    $('#InputDatePicker').datepicker();
    

    您正在使用“InputDatePicker”的id 标识一个元素。所以发生了两件事之一:

    1. 您新添加的元素没有id,这意味着这个选择器没有选择它们。在这种情况下,您需要选择新添加的元素。
    2. 您新添加的元素确实具有id,这意味着您的HTML 无效并且代码的行为未定义。在这种情况下,您需要修复您的 HTML,以免重复使用 id 值并相应地更新您的选择器。根据定义,id 值必须是唯一的。

    【讨论】:

    • 您好,谢谢,我已经添加了我的问题中缺少的相关信息,您要求初始化插件的方式不起作用,请再看一下,现在可以提供帮助。谢谢
    • @Abrar:你尝试过我的建议吗?根据您在问题中更新的代码,您没有。 script 块只会在页面加载时执行一次。您的addRow 函数稍后会被调用,之后script 块已经被执行。所以你需要在新添加的元素上再次初始化 Datepicker 插件。 jQuery 无法初始化尚不存在的元素
    • 是的,我通过添加 $('#InputDatePicker').datepicker(); 尝试了您的建议在 for 循环之后,但它没有工作。
    • @Abrar:您能否更新问题以显示更新后的代码?此外,详细说明它是如何 不起作用的。 jQuery 选择器是否找到了您期望的元素?
    • 确定我添加了更新的代码,抱歉我不知道你第二个问题的答案。
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多