-2

I add input dynamically and write event for this input. Event work, but all the second inputs are the same s. I want to do event for each other.

JavaScript:

$(document).ready(function() {
    var max_fields = 4; //maximum input boxes allowed
            var wrapper = $(".input_fields_wrap"); //Fields wrapper
            var add_button = $(".add_field_button"); //Add button ID

            var x = 1; //initlal text box count
            $(add_button).click(function (e) {
                e.preventDefault();
                if (x < max_fields) { //max input box allowed
                    x++; //text box increment
                    $(wrapper).append('<div><input id="test" class="test"  type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a><br><input id="test2" class="test2" type="text" name="mytext2[]"></div></div>'); //add input box

                    $(".test").on("input", function () {
                        $(this).closest('div').find('.test2').val($(this).val());
                    });
                }
            });

            $(wrapper).on("click", ".remove_field", function (e) {
                e.preventDefault();
                $(this).parent('div').remove();
                x--;
            });

            $(".test").on("input", function () {
                $(this).closest('div').find('.test2').val($(this).val());
            });

});

HTML:

<div id="input_fields_wrap" class="input_fields_wrap">
        <button class="add_field_button">Add More Fields</button>
        <div><input id="test" class="test" type="text" name="mytext[]"></div>
        <div><input id="test2" class="test2" type="text" name="mytext2[]"></div>
    </div> 
  • 2
    Ids have to be unique – Andreas Mar 03 '17 at 09:06
  • 2
    Possible duplicate of [Event binding on dynamically created elements?](http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements) – Andreas Mar 03 '17 at 09:07
  • Welcome to Stack Overflow! Please take the [tour], have a look around, and read through the [help], in particular [*How do I ask a good question?*](/help/how-to-ask) I'm afraid it's not at all clear what you're asking. – T.J. Crowder Mar 03 '17 at 09:08
  • When asking others for help, please take the time to format your code with consistent, readable formatting and indentation. (I've fixed it for you on this occasion.) – T.J. Crowder Mar 03 '17 at 09:11

3 Answers3

0

You can add a class to all your dynamically created elements and then attach an event listener to the class before the event is actually created in the following manner: Assuming the class you'll be giving is dynamic:

$(document).on('event','.dynamic',function(){
  console.log($(this));
});

UPDATE:

$(document).on('input','.dynamic',function(){
  console.log("Typing in input 1");
});
$(document).on('input','.dynamic2',function(){
  console.log("Typing in input 2");
});
$(document).ready(function() {
    var max_fields = 4; //maximum input boxes allowed
    var wrapper = $(".input_fields_wrap"); //Fields wrapper
    var add_button = $(".add_field_button"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e) {
        e.preventDefault();
        if (x < max_fields) { //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input id="test" class="dynamic"  type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a><div><input id="test2" class="dynamic2" type="text" name="mytext2[]"></div></div>'); //add input box
        }
    });

    $(wrapper).on("click", ".remove_field", function(e) {
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });


});

And the HTML would be

<div id="input_fields_wrap" class="input_fields_wrap">
    <button class="add_field_button">Add More Fields</button>
    <div><input id="test" class="dynamic" type="text" name="mytext[]"></div>
    <div><input id="test2" class="dynamic" type="text" name="mytext2[]"></div>
</div>
Shakti Phartiyal
  • 5,370
  • 2
  • 19
  • 42
0

jQuery first find the all tag and add event. so you can need to assign event after add field...

$(document).ready(function() {
    var max_fields = 4; //maximum input boxes allowed
    var wrapper = $(".input_fields_wrap"); //Fields wrapper
    var add_button = $(".add_field_button"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e) {
        e.preventDefault();
        if (x < max_fields) { //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input id="test" class="test dynamic"  type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a><div><input id="test2" class="test2 dynamic" type="text" name="mytext2[]"></div></div>'); //add input box

 $('.dynamic').on('event',function(){
    // Your Code
});
 //   Your Event Code Put Here   //
// It Find the all input and add event // 

        }
    });

    $(wrapper).on("click", ".remove_field", function(e) {
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });

    $(".input_fields_wrap").on("input", "input", function() {
        $(".input_fields_wrap .test2").val($(".input_fields_wrap .test").val());
    });

});
Chirag Suthar
  • 178
  • 1
  • 13
0

may you need to see the demo as above...it works as you need..i maked some changes in class or jQuery...

$(document).ready(function() {
    var max_fields = 4; //maximum input boxes allowed
    var wrapper = $(".input_fields_wrap"); //Fields wrapper
    var add_button = $(".add_field_button"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function(e) {
        e.preventDefault();
        if (x < max_fields) { //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div><input id="test" class="test dynamic"  type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a><br><input id="test2" class="test2 dynamic" type="text" name="mytext2[]"></div></div>'); //add input box

     $(".test").on("input", function() {
  $(this).closest('div').find('.test2').val($(this).val());
    });
 //   Your Event Code Put Here   //
// It Find the all input and add event // 

        }
    });

    $(wrapper).on("click", ".remove_field", function(e) {
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });

    $(".test").on("input", function() {
        $(this).closest('div').find('.test2').val($(this).val());
    });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="input_fields_wrap" class="input_fields_wrap">
    <button class="add_field_button">Add More Fields</button>
    <div>
    <input id="test" class="test" type="text" name="mytext[]"/> 
    <bR/> 
    <input id="test2" class="test2" type="text" name="mytext2[]"/>
    </div>
</div>
Chirag Suthar
  • 178
  • 1
  • 13