javascript - 如何使用其 ID 在 jquery/javascript 中选择动态生成的表单元素?

标签 javascript jquery forms

我正在尝试在用户单击“添加”按钮/加号时动态创建一行 3 个表单字段。

enter image description here

用于创建表单元素的 Javascript 代码如下:

<script type="text/javascript">
    var field_counter = 1;
    var field_limit = 5;
    species = document.getElementById('species');
    breed = document.getElementById('breed');


    function addInput(divName){

        if (field_counter == field_limit)  {
            alert("You have reached the limit of adding " + field_counter + " inputs");
        }
        else {

            var dynamic_species = 'species'+field_counter; //dynamic id for species
            var dynamic_breed = 'breed'+field_counter;  //dynamic id for breed
            var dynamic_quantity = 'quantity'+field_counter; //dynammic id for quantity
            var dynamicForm = '<div class="form-group"><div class="col-md-4"><label for="'+dynamic_species+'">Animal Type</label><select class="form-control input-sm '+dynamic_species+'" id="'+dynamic_species+'"><option></option></select></div>';
            dynamicForm+='<div class="form-group"><div class="col-md-4"><label for="'+dynamic_breed+'">Breed</label><select class="form-control input-sm '+dynamic_breed+'"  id="'+dynamic_breed+'"><option></option></select></div>';
            dynamicForm+='<div class="form-group"><div class="col-md-2"><label for="'+dynamic_quantity+'">Quantity</label><input type="number" name="quantity_export" id="'+dynamic_quantity+'" class="form-control input-sm '+dynamic_quantity+'" /></div>';
            var newdiv = document.createElement('div');
            newdiv.innerHTML =  dynamicForm;
            document.getElementById(divName).appendChild(newdiv);
            document.getElementById(dynamic_species).innerHTML = species.innerHTML;
            document.getElementById(dynamic_breed).innerHTML = breed.innerHTML;
            field_counter++;

        }
    }
</script>
<div class="col-md-2" >
    <label for="">&nbsp;</label>
    <i onclick="addInput('dynamicInput');" style="cursor: pointer; border: none;" class="fa fa-plus form-control input-sm">Add</i>

</div>

使用上面的代码,我正在创建表单字段“动物类型、品种和数量”,所有字段都排成一行,如图所示。可以添加的最大行数限制为变量“field_limit”的值。

下拉菜单的值最初使用代码从父下拉菜单填充:

species = document.getElementById('species');
breed = document.getElementById('breed'); 
document.getElementById(dynamic_species).innerHTML = species.innerHTML;
document.getElementById(dynamic_breed).innerHTML = breed.innerHTML;

问题:如何选择新表单字段动态生成的 ID。

enter image description here

这是当页面第一次加载时用于选择 HTML 中第一行表单字段的脚本:

$("#species").change(function(){
        $('#breed').empty();
        //alert($(this).val());
        var param = {'id':$(this).val()};
        $.ajax({
            type : 'POST',
            url : '<?php echo base_url();?>select_breed',
            dataType : 'json',
            data: param,
            success : function(data)
            {
                var select = $('#breed');
                select.empty().append(data);
            },
            error : function(XMLHttpRequest, textStatus, errorThrown)
            {
                alert(XMLHttpRequest.responseText);

            }
        });

    });

第二行表单字段是使用以下 ID 动态创建的

First Field : Animal Type : ID="species1"

Second Field : Breed : ID="breed1"

Third Field : Quantity : ID="quantity1"

我无法使用 jquery 选择器选择动态生成的表单字段:- 例如:$("#species1").change(function(){});,它不是工作。

我想做什么?

我需要使用其 ID 属性获取这些字段的值。任何帮助将不胜感激。谢谢。

最佳答案

使用event delegation对于像这样动态生成的内容:

// change `document` to top level parent that existed on page or
// parent container
$(document).on("change", "#species1", function(){...});

关于javascript - 如何使用其 ID 在 jquery/javascript 中选择动态生成的表单元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986876/

相关文章:

javascript - Jeditable插件开发

javascript - jQuery UI 自动完成 url

php - 在模式框中显示表单(简单的 php 文件)?

javascript - 带文件上传的 FormData Ajax 请求

javascript - 我可以使用PHP在国外网页上执行JavaScript吗?

jQuery(如果可见)

javascript - 如何在 Angularjs 中访问表单值?

css - 将 Div/层与字段集/图例一起使用

javascript - 为什么 'this' 在箭头函数中引用时返回 'undefined' 而在匿名函数中调用时却不返回?

javascript - 如何在 jQuery DataTables 中设置日期格式