简体   繁体   中英

On Click add HTML Elements

I am stuck with jquery wherein I am trying to add dynamic html elements (on click of +) which should also get removed on clicking on (-). Each element should have unique name and id say "name_1","name_2"...

But it doesn't seem to going my way.

Here is my code:

 $(document).ready(function() { var maxField = 10; var addButton = $('.add_button'); var wrapper = $('.field_wrapper'); var fieldHTML = $('.field_wrapper1').html(); var x = 1; $('.add_button').click(function() { if (x < maxField) { x++; $('.field_wrapper').append('<div class="field_wrapper1" style = "display:none;margin:20px;"><div><strong>*Upload New Contract Copy :</strong><input type="text" name="text_1" id = "text_1" value="" maxlength="50"/><strong><font color="#ff0000">* </font>Upload New Contract Copy :</strong><input type="file" name="pdf_1" id="pdf_1" accept="application/pdf" /><a href="javascript:void(0);" class="remove_button" title="Remove field"><img src="http://www.allintravellocal.com/images/minus_img.jpg"/></a><label for="contract_copy_pdf" class="err" id="err_lbl_contract_copy_pdf"></label></div></div>'); } }); $(wrapper).delegate('.remove_button', 'click', function(e) { e.preventDefault(); $(this).parent('div').remove(); x--; }); }); 
 <div class="field_wrapper"> <div> <strong><font color='#ff0000'>* </font>Upload New Contract Copy :</strong> <input type="text" name="contract_copy_text_1" id="contract_copy_text_1" value="" maxlength="50" /> <strong><font color='#ff0000'>* </font>Upload New Contract Copy :</strong> <input type="file" name="contract_copy_pdf_1" id="contract_copy_pdf_1" accept="application/pdf" />&nbsp;&nbsp;&nbsp;&nbsp;(*.pdf) <a href="javascript:void(0);" class="add_button" title="Add field"> <img src="http://www.allintravellocal.com/images/plus_img.jpg" /> </a> <label for="contract_copy_pdf" class="err" id="err_lbl_contract_copy_pdf"></label> </div> </div> 

Here is my fiddle :

Demo

Why you have this display:none inside field_wrapper1:

<div class="field_wrapper1" style = "display:none;margin:20px;">

You will never see the newly created element unless change to display:block . And for the increment unique name and id: Place x++; after appended function like so:

  $('.field_wrapper').append('<div class="field_wrapper1" style = "display:block;margin:20px;"><div><strong>*Upload New Contract Copy :</strong><input type="text" name="text_'+x+'" id = "text_'+x+'" value="" maxlength="50"/><strong><font color="#ff0000">* </font>Upload New Contract Copy :</strong><input type="file" name="pdf_1" id="pdf_1" accept="application/pdf" /><a href="javascript:void(0);" class="remove_button" title="Remove field">-</a><label for="contract_copy_pdf" class="err" id="err_lbl_contract_copy_pdf"></label></div></div>'); 
        x++;

Its working as expected but with few things to modify:

DEMO

  • You have set display:none to your added element and even though its getting appended its not getting shown in the UI . So just remove that property as below :

$('.field_wrapper').append('<div class="field_wrapper1" style = "margin:20px;">... }

  • Use .on instead of .delegate if you are using jquery.js > 1.7 because As of jQuery 1.7, .delegate() has been superseded by the .on() method according to this and so the below code changes

Changes

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

Check this Js Fiddle link, and each elements have unique id and name as you need.

$(document).ready(function(){
var maxField = 10;
var addButton = $('.add_button');
var wrapper = $('.field_wrapper');
var fieldHTML = $('.field_wrapper1').html();
var x = 1;
$('.add_button').click(function(){
    if(x < maxField){
        x++;
        id='text_'+x;
        name="name_"+x;
        $('.field_wrapper').append('<div class="field_wrapper1" style = "display:block;margin:20px;"><div><strong>*Upload New Contract Copy :</strong><input type="text" name='+name+' id ='+ id+' value="" maxlength="50"/><strong><font color="#ff0000">* </font>Upload New Contract Copy :</strong><input type="file" name="pdf_1" id="pdf_1" accept="application/pdf" /><a href="javascript:void(0);" class="remove_button" title="Remove field"><img src="http://www.allintravellocal.com/images/minus_img.jpg"/></a><label for="contract_copy_pdf" class="err" id="err_lbl_contract_copy_pdf"></label></div></div>'); 
    }
});
$(wrapper).delegate('.remove_button','click', function(e){ 
    e.preventDefault();
    $(this).parent('div').remove();
    x--;
});
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM