为什么使用Jquery动态生成DropDown时仅填充第一个DropDown?

武士杰克

我正在尝试创建一个类似DataEntry Grid / table的结构,其中用户在按钮click上追加新行。该行将具有TextBoxes,DropDown,Calendar Control。所有这些都应该在客户端完成。到目前为止,我已经知道了,并且如您所见,我正在尝试填充DropDownusing var数据对象(目前仅适用于第一个下拉列表)。如果我能够用硬编码填充所有DropDown,则var data可以尝试获取使用webmethod从DataBase获取数据,但首先我应该至少能够使用硬编码值填充所有DropDown,然后再使用它。

代码

  <script src="js/jquery-1.11.0.js" type="text/javascript"></script>

<table id="field">
    <tr>
        <td>Alternatif <span class='num'>1</span></td>
        <td><input type="text" /></td>
        <td><select id="myDropDownLisTId"> <input type="text" id="datepicker"></select></td>
    </tr>
</table>
<button type="button" id="addField">Add Field</button>
<button type="button" id="deleteField">Delete Field</button>

<script id="template" type="text/template">
<tr>
    <td class="number">Alternatif</td>
    <td><input type="text" /></td>
     <td><select id="myDropDownLisTId"> <input type="text" id="datepicker"></td>

</tr>
</script>
 <script type="text/javascript">
     $(document).ready(function () {

         $("#addField").click(function (event) {
             $($("#template").html()).appendTo($("#field tbody")).show("slow");
             if ($("td").hasClass("number")) {
                 var i = parseInt($(".num:last").text()) + 1;
                 $($("<span class='num'> " + i + " </span>")).appendTo($(".number")).closest("td").removeClass('number');
             }
             event.preventDefault();
         });

         $("#deleteField").click(function (event) {
             var lengthRow = $("#field tbody tr").length;
             if (lengthRow > 1)
                 $("#field tbody tr:last").remove();
             event.preventDefault();
         });



     var data = [
    { id: '0', name: 'test 0' },
    { id: '1', name: 'test 1' },
    { id: '2', name: 'test 2' },
    { id: '3', name: 'test 3' },
    { id: '4', name: 'test 4' },
];


     for (i = 0; i < data.length; i++) {

         $("#myDropDownLisTId").append(
        $('<option />', {
            'value': data[i].id,
            'name': data[i].name,
            'text': data[i].name
        })
                );

     }
});
    </script>

FIDDLE(更新)

http://jsfiddle.net/FSGbh/5/

IT人

问题是您的代码中有两次相同的ID,即myDropDownLisTId

为了使其正常工作,我刚刚将Id更改为class,它也在第二个下拉列表中加载数据。

的HTML

<table id="field">
    <tr>
        <td>Alternatif <span class='num'>1</span></td>
        <td><input type="text" /></td>
        <td><select class="myDropDownLisTId"> <input type="text" id="datepicker" /></select></td>
    </tr>
</table>
<button type="button" id="addField">Add Field</button>
<button type="button" id="deleteField">Delete Field</button>
<tr>
    <td class="number">Alternatif</td>
    <td><input type="text" /></td>
    <td><select class="myDropDownLisTId" /> <input type="text" id="datepicker" /></td>
</tr>

jQuery的

     $(document).ready(function () {

         $("#addField").click(function (event) {
             $($("#template").html()).appendTo($("#field tbody")).show("slow");
             if ($("td").hasClass("number")) {
                 var i = parseInt($(".num:last").text()) + 1;
                 $($("<span class='num'> " + i + " </span>")).appendTo($(".number")).closest("td").removeClass('number');
             }
             event.preventDefault();
         });

         $("#deleteField").click(function (event) {
             var lengthRow = $("#field tbody tr").length;
             if (lengthRow > 1)
                 $("#field tbody tr:last").remove();
             event.preventDefault();
         });



     var data = [
    { id: '0', name: 'test 0' },
    { id: '1', name: 'test 1' },
    { id: '2', name: 'test 2' },
    { id: '3', name: 'test 3' },
    { id: '4', name: 'test 4' },
];


     for (i = 0; i < data.length; i++) {

         $(".myDropDownLisTId").last().append(
        $('<option />', {
            'value': data[i].id,
            'name': data[i].name,
            'text': data[i].name
        })
                );

     }
});

现场演示

- - - 编辑 - - -

我已经根据与用户的讨论更新了答案。我已经对代码进行了一些更改。

的HTML

<table id="field">
    <tbody>
    <tr>
        <td>Alternatif <span class='num'>1</span></td>
        <td><input type="text" /></td>
        <td><select class="myDropDownLisTId"> <input type="text" id="datepicker" /></select></td>
    </tr>
    </tbody>
</table>
<button type="button" id="addField">Add Field</button>
<button type="button" id="deleteField">Delete Field</button>

jQuery的

     $(document).ready(function () {
             filldd();

            var rowstring = "<tr><td class='number'>Alternatif</td><td><input type='text'/></td><td><select class='myDropDownLisTId'/><input type='text' id='datepicker'/></td></tr>";
             $("#addField").click(function (event) {
             $("#field tbody").append(rowstring);
             filldd();
             if ($("td").hasClass("number")) {
                 var i = parseInt($(".num:last").text()) + 1;
                 $($("<span class='num'> " + i + " </span>")).appendTo($(".number")).closest("td").removeClass('number');
             }
             event.preventDefault();
         });

         $("#deleteField").click(function (event) {
             var lengthRow = $("#field tbody tr").length;
             if (lengthRow > 1)
                 $("#field tbody tr:last").remove();
             event.preventDefault();
         });
});

 function filldd(){
    var data = [
    { id: '0', name: 'test 0' },
    { id: '1', name: 'test 1' },
    { id: '2', name: 'test 2' },
    { id: '3', name: 'test 3' },
    { id: '4', name: 'test 4' },
];

    for (i = 0; i < data.length; i++) {
         $(".myDropDownLisTId").append(
            $('<option />', {
                'value': data[i].id,
                'name': data[i].name,
                'text': data[i].name
            })
         );
     }
         }

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么JQuery函数仅适用于第一个文本框

Wordpress ACF选择:动态使用类别作为选择时,仅返回第一个对象

Listview仅填充第一个项目

为什么我的 jQuery show() 函数在 php foreach 循环中仅适用于第一个元素

在选择框中选择一个选项时,填充使用 jquery 动态生成的输入

使用jQuery查找元素的第一个动态类的每个第一个实例

由Jquery动态创建的数组文本字段仅提交第一个条目

生成列表,但仅显示第一个索引

仅当 JQuery 中有 2 个同名时才更改第一个属性

为什么strtok仅打印第一个单词?

为什么bash仅将第一个元素附加到数组

为什么Apache Hive XPath仅返回第一个匹配项?

为什么交易不起作用?仅适用于第一个 .savechanges();

为什么列表函数仅输出数组的第一个值?

为什么这仅适用于第一个div?

为什么选择*从仅返回第一个字段?

为什么带有hasClass的if / else条件仅触发第一个条件?

OL 4-仅第一个标记(功能)处于活动状态,为什么?

为什么QListWidget中的图标仅显示在第一个元素上?

为什么Selenium仅获取页面上第一个工具提示的文本?

为什么ZeroClipboard仅复制句子的第一个单词?

为什么我的列表视图仅检测到第一个复选框?

为什么我的脚本仅访问数组中的第一个元素?

为什么最后一个数组不问就填充第一个数组?

为什么事务在第一个失败时插入2个值?

具有参数的SSRS缓存的报告仅使用第一个生成的报告

从字符串加载时,jquery.html()仅返回第一个文本

当我尝试使用fit_generator训练Keras时,为什么Keras在第一个时期停止了?

为什么递归只导致第一个嵌套对象值的值而不是其余的值,当使用返回时?