Shivam Pandya
Shivam Pandya

Reputation: 1061

Jquery, Unable to Remove cloned element

When I try to use clone method in my jquery code, I face some issues in it. I listed it here what I want and what I issue I face.

First Of All let me tell what I want, I want that when I click on add button, my code should clone give id's element with data with remove button. (JS Fiddle)

Here Is My Code : HTML

<table class="cloneelementtable">
    <tr>
        <td>
            <div class="priceandsize1row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize2row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize3row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize4row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize5row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td id="divaddmore">
            <div class="priceandsize6to9row" id="todoclone">
                <img src="http://cdn2.iconfinder.com/data/icons/icojoy/noshadow/standart/gif/24x24/001_01.gif" width="30" height="30">
            </div>
        </td>
        <td>
            <div class="priceandsize10row">
                <div class="tablecolorgrey">B</div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <div id="showsizeheader">
            <td id="tdhide1" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="16">
                    </div>
                </div>
            </td>
            <td id="tdhide2" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="17">
                    </div>
                </div>
            </td>
            <td id="tdhide3" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="18">
                    </div>
                </div>
            </td>
            <td id="tdhide4" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="19">
                    </div>
                </div>
            </td>
            <td id="tdhide5" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="20">
                    </div>
                </div>
            </td>
            <td id="tdhide6" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="21">
                    </div>
                </div>
            </td>
            <td id="tdhide7" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="22">
                    </div>
                </div>
            </td>
            <td id="tdhide8" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="23">
                    </div>
                </div>
            </td>
            <td id="tdhide9" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="24">
                    </div>
                </div>
            </td>
            <td id="tdhide10" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="25">
                    </div>
                </div>
            </td>
            <td id="tdhide11" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="26">
                    </div>
                </div>
            </td>
            <td id="tdhide12" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="27">
                    </div>
                </div>
            </td>
            <td id="tdhide13" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="28">
                    </div>
                </div>
            </td>
            <td id="tdhide14" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="29">
                    </div>
                </div>
            </td>
            <td id="tdhide15" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="30">
                    </div>
                </div>
            </td>
            <td id="tdhide16" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="31">
                    </div>
                </div>
            </td>
            <td id="tdhide17" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="32">
                    </div>
                </div>
            </td>
        </div>
        <td>
            <div class="priceandsize10row">
                <div class="tablecolorgrey">140</div>
            </div>
        </td>
        <td>
            <div class="priceandsize11row">
                <div class="tablecolorgrey">$4815.00</div>
        </td>
        <td>
            <div class="priceandsize11row" id="showsize">
                <img id="showimg" src="images/img_click_moresizes.jpg" width="35" height="30">
            </div>
        </td>
    </tr>
    <tr id="cloneelement">
        <td>
            <div class="priceandsize1row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize2row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize3row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize4row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize5row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row">&nbsp;</div>
        </td>
        <td>
            <div class="priceandsize6to9row" id="toremoveclone">
                <img src="http://cdn2.iconfinder.com/data/icons/32pxmania/buttons_21.png" width="30" height="30">
            </div>
        </td>
        <td>
            <div class="priceandsize10row">
                <div class="tablecolorgrey">B</div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <td>
            <div class="priceandsizeinputsrow">
                <div class="aviailableinput">
                    <input name="" type="text" placeholder="15">
                </div>
            </div>
        </td>
        <div id="showsizeheader">
            <td id="tdhide1" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="16">
                    </div>
                </div>
            </td>
            <td id="tdhide2" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="17">
                    </div>
                </div>
            </td>
            <td id="tdhide3" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="18">
                    </div>
                </div>
            </td>
            <td id="tdhide4" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="19">
                    </div>
                </div>
            </td>
            <td id="tdhide5" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="20">
                    </div>
                </div>
            </td>
            <td id="tdhide6" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="21">
                    </div>
                </div>
            </td>
            <td id="tdhide7" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="22">
                    </div>
                </div>
            </td>
            <td id="tdhide8" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="23">
                    </div>
                </div>
            </td>
            <td id="tdhide9" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="24">
                    </div>
                </div>
            </td>
            <td id="tdhide10" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="25">
                    </div>
                </div>
            </td>
            <td id="tdhide11" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="26">
                    </div>
                </div>
            </td>
            <td id="tdhide12" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="27">
                    </div>
                </div>
            </td>
            <td id="tdhide13" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="28">
                    </div>
                </div>
            </td>
            <td id="tdhide14" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="29">
                    </div>
                </div>
            </td>
            <td id="tdhide15" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="30">
                    </div>
                </div>
            </td>
            <td id="tdhide16" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="31">
                    </div>
                </div>
            </td>
            <td id="tdhide17" style="display:none;">
                <div class="priceandsizeinputsrow">
                    <div class="aviailableinput">
                        <input name="" type="text" placeholder="32">
                    </div>
                </div>
            </td>
        </div>
        <td>
            <div class="priceandsize10row">
                <div class="tablecolorgrey">140</div>
            </div>
        </td>
        <td>
            <div class="priceandsize11row">
                <div class="tablecolorgrey">$4815.00</div>
        </td>
    </tr>
</table>

Code Here : JQ

var id = 0;
$(document).ready(function () {
    $('#todoclone').click(function () {
        $('#cloneelement').clone().appendTo(".cloneelementtable");
        id++;
    });

    /*$('#toremoveclone').click(function() {
               $('#cloneelement').closest('#cloneelement').fadeOut("slow", function(){
             $(this).remove();
              });
            });*/
    $("#toremoveclone").click(function () {
        console.log(id);
        if (id > 1) { //Only apply if the lang field is more than 1
            id = id - 1;
            $("#cloneelement:last").remove();
            console.log(id);
        }
    });
});

I do some search on that and made code like that (Code here : JS Fiddle)

But there are some problem in code, (listed below) 1] I'm unable to remove cloned element, I need to clone it atlist 3 time and after that its only remove once when I click on first minus icon. After that I can't remove more.

Can anyone tell me what to do for solve this kind of problem ?

i.e. Click on Plus button for clone and click on remove button for remove clone.

Upvotes: 1

Views: 2196

Answers (2)

user405398
user405398

Reputation:

The problem is with your $("#toremoveclone").click(...) binding. You were missing few things. Here is working fiddle.

Issues:

  • ID's should be unique.
  • You were expecting event delegation, without setting it up.
  • $("#toremoveclone").click(...) only binds click event to the first #toremoveclone.
  • To check that add more than 2 clones(Your code needs more than 1 clones to delete one) & delete the first one in your fiddle.
  • It will get delete. But others won't because, they were not bound to any click event.

Changes I made:

  • Added a class for the div(toremoveclone).

  • Changed event binding to

    $(".cloneelementtable").on('click', '.toremoveclone', function () {..})

  • Learn more about Jquery's event delegation in here & here, since If I explain, I may screw it up :(

Upvotes: 3

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324610

IDs MUST be unique. If there is any chance that you might be cloning a node, make sure you replace its ID attribute with something unique and never use IDs inside it unless you're prepared to replace them all too. Prefer classes for thi.

Upvotes: 3

Related Questions