2

i have a code to dynamically add table rows when user clicks add row button. This will happen in below scenario. My function will direct the flow into 3 different way based on received json reponse

  1. if response length is more than 0 and has key called "actual" .. then i will populate the received response in pop up window in read only mode. with hide add row button
  2. if response length is more than 0 and does not has key called "actual" .. then i will populate the received response in pop up window in editable mode with add row button visibility mode 3.if response length is equal to 0 and does not has key called "actual" .. then i will append one table row in pop up window with addrow.

When i was in flow 2, and click add row button --> that time it add one row later i moved to flow 3 , and click add row button once --> i am getting two row added, and again i am moving to flow 2 and click add row button --. that time i get 3 row when click add row button. So each time its incrementing by one. Please help to find a bug. Quick help will be very much appreciated!

$(document).on("click", ".popup-trigger", function(e) {
  $("#sino").val($(this).closest('tr').children()[1].textContent);
  $("#iname").val($(this).closest('tr').children()[2].textContent);
  $("#icode").val($(this).closest('tr').children()[3].textContent);
  $("#recqty").val($(this).closest('tr').children()[4].textContent);

  var irepno = $('#irepno').val();
  var icode = $('#icode').val();
  var sino = $('#sino').val();

  var inspinp = new Object();
  inspinp.sino = sino;
  inspinp.irepno = irepno;
  inspinp.icode = icode;

  //Call PopulateTable2 servlet to get the Inspection row details
  $.ajax({
    url: 'PopulateTable2',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify({
      "inspinp": inspinp
    }),
    contentType: 'application/json',
    mimeType: 'application/json',
    success: function(responseJson) {
      if (responseJson.length != 0) {
        if (responseJson && responseJson[0] && responseJson[0].actual1) {
          // find reponseJson as actual values; if found, then made that as read only(i.e., inspection data exist)
          $("#tab_logic").find("tr:gt(0)").remove();
          var tableinsp = $("#tab_logic");
          $.each(responseJson, function(key, value) {
            var rowNew = $("<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
            rowNew.children().eq(0).text(value['parameters']);
            rowNew.children().eq(1).text(value['specifications']);
            rowNew.children().eq(2).text(value['actual1']);
            rowNew.children().eq(3).text(value['actual2']);
            rowNew.children().eq(4).text(value['actual3']);
            rowNew.children().eq(5).text(value['actual4']);
            rowNew.children().eq(6).text(value['actual5']);
            rowNew.appendTo(tableinsp);
          });
          $("#addrow").hide();
          $("#save").hide();
        } else {
          // else, received response only criteria from QC_CRITERIA table and made it as user editable form
          $("#tab_logic").find("tr:gt(0)").remove();
          var tableinsp = $("#tab_logic");
          $.each(responseJson, function(key, value) {
            var rowNew = $("<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
            rowNew.children().eq(0).text(value['parameters']);
            rowNew.children().eq(1).text(value['specifications']);
            rowNew.children().eq(2).html('<input type="text" list="combo-options" id="inpact10" class="tb3"> <datalist id="combo-options"> <option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist>');
            rowNew.children().eq(3).html('<input type="text" list="combo-options" id="inpact20" class="tb3"> <datalist id="combo-options"> <option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist>');
            rowNew.children().eq(4).html('<input type="text" list="combo-options" id="inpact30" class="tb3"> <datalist id="combo-options"> <option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist>');
            rowNew.children().eq(5).html('<input type="text" list="combo-options" id="inpact40" class="tb3"> <datalist id="combo-options"> <option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist>');
            rowNew.children().eq(6).html('<input type="text" list="combo-options" id="inpact50" class="tb3"> <datalist id="combo-options"> <option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist>');
            rowNew.children().eq(7).html('<img src="delete.gif" height="42" width="42" alt="idata" class="del">');
            rowNew.appendTo(tableinsp);
          });
          $("#addrow").show();
          $("#save").show();
        }

        //  return false;
      } else {
        $("#tab_logic").find("tr:gt(0)").remove();
        $('#tab_logic tbody').append('<tr><td><input type="text" list="inppara" id="inpparameter" ><datalist id="inppara"><option value="TypeRating">TypeRating</option><option value="Operation Check">Operation Check</option><option value="Ext.Apperance">Ext.Apperance</option><option value="Verify TC">Verify TC</option><option value="Material">Material</option><option value="Dimension Check">Dimension Check</option><option value="Threads Check">Threads Check</option><option value="Visual Check">Visual Check</option><option value="Specification">Specification</option><option value="Batch no">Batch no</option><option value="Mfg.Date">Mfg.Date</option><option value="Exp.Date">Exp.Date</option></datalist><td><input type="text" list="inpsepci" id="inpspec" ><datalist id="inpsepci"><option value="AsperPO">AsperPO</option><option value="Damage">Damage</option><option value="OK">OK</option><option value="Stainless Steel">Stainless Steel</option><option value="Gaues">Gaues</option><option value="Mild Steel">Mild Steel</option><option value="As per Drawing">As per Drawing</option><option value="Cast Iron">Cast Iron</option><option value="Copper">Copper</option><option value="Aluminium">Aluminium</option><option value="Brass">Brass</option><option value="Spring Steel">Spring Steel</option><option value="Tool Steel">Tool Steel</option><option value="Nylon">Nylon</option><option value="CRGO">CRGO</option><option value="EN1">EN1</option><option value="EN2">EN2</option></datalist></td><td><input type="text" list="act1" id="inpact10" class="tb3"><datalist id="act1"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act2" id="inpact20" class="tb3"><datalist id="act2"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act3" id="inpact30" class="tb3"><datalist id="act3"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act4" id="inpact40" class="tb3"><datalist id="act4"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act5" id="inpact50" class="tb3"><datalist id="act5"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><img src="delete.gif" height="42" width="42" alt="idata" class="del"></td></tr>');
        $("#addrow").show();
        $("#save").show();
      }
    }
  });

  // Popup Window
  var scrollTop = '';
  var newHeight = '100';

  $(window).bind('scroll', function() {
    scrollTop = $(window).scrollTop();
    newHeight = scrollTop + 100;
  });

  //        $('.popup-trigger').click(function(e) {
  e.stopPropagation();
  $('.popup').after('<div class="page-cover"></div>');
  if (jQuery(window).width() < 767) {
    $(this).after($(".popup"));
    $('.popup').show().addClass('popup-mobile').css('top', 0);
    $('html, body').animate({
      scrollTop: $('.popup').offset().top
    }, 500);
  } else {
    $('.popup').removeClass('popup-mobile').css('top', newHeight).toggle();
  };
  //        });

  //script for close button
  $('html, .popup-btn-close').click(function(e) {
    $('.popup').hide();
    $('.page-cover').detach();
    window.opener.location.reload();
  });

  //script for save button
  $('html, #save').click(function(e) {
    //  alert("i am");
    // add code here
  });

  //script for addrow button
  $('html, #addrow').click(function(e) {
    $('#tab_logic tr:last').after('<tr><td><input type="text" list="inppara" id="inpparameter" ><datalist id="inppara"><option value="TypeRating">TypeRating</option><option value="Operation Check">Operation Check</option><option value="Ext.Apperance">Ext.Apperance</option><option value="Verify TC">Verify TC</option><option value="Material">Material</option><option value="Dimension Check">Dimension Check</option><option value="Threads Check">Threads Check</option><option value="Visual Check">Visual Check</option><option value="Specification">Specification</option><option value="Batch no">Batch no</option><option value="Mfg.Date">Mfg.Date</option><option value="Exp.Date">Exp.Date</option></datalist><td><input type="text" list="inpsepci" id="inpspec" ><datalist id="inpsepci"><option value="AsperPO">AsperPO</option><option value="Damage">Damage</option><option value="OK">OK</option><option value="Stainless Steel">Stainless Steel</option><option value="Gaues">Gaues</option><option value="Mild Steel">Mild Steel</option><option value="As per Drawing">As per Drawing</option><option value="Cast Iron">Cast Iron</option><option value="Copper">Copper</option><option value="Aluminium">Aluminium</option><option value="Brass">Brass</option><option value="Spring Steel">Spring Steel</option><option value="Tool Steel">Tool Steel</option><option value="Nylon">Nylon</option><option value="CRGO">CRGO</option><option value="EN1">EN1</option><option value="EN2">EN2</option></datalist></td><td><input type="text" list="act1" id="inpact10" class="tb3"><datalist id="act1"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act2" id="inpact20" class="tb3"><datalist id="act2"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act3" id="inpact30" class="tb3"><datalist id="act3"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act4" id="inpact40" class="tb3"><datalist id="act4"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act5" id="inpact50" class="tb3"><datalist id="act5"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><img src="delete.gif" height="42" width="42" alt="idata" class="del"></td></tr>');
  });
  $('.popup').click(function(e) {
    e.stopPropagation();
  });
});[![Flow 1 - add row - gives one row[![another one flow - see by default it has one row when pop up open - when click add row ; now its adding twice][1]][1]][1]
kavi
  • 163
  • 1
  • 9
  • Could be the missing ";" at the end of this line. scrollTop: $('.popup').offset().top – afishintaiwan Mar 14 '17 at 04:44
  • @afishintaiwan: i dont think that could cause an issue – kavi Mar 14 '17 at 04:54
  • Just going to make a general comment about code structure. But you're going to have lots of fun (sarcasm) debugging your code as you go or even making changes given how you just throw extremely long lines of code along with repetitive lines of code with very minor changes that could easily be done with arrays. – A. L Mar 14 '17 at 05:24

2 Answers2

0

your this row

  $('#tab_logic tr:last').after('<tr><td><input type="text" list="inppara" id="inpparameter" ><datalist id="inppara"><option value="TypeRating">TypeRating</option><option value="Operation Check">Operation Check</option><option value="Ext.Apperance">Ext.Apperance</option><option value="Verify TC">Verify TC</option><option value="Material">Material</option><option value="Dimension Check">Dimension Check</option><option value="Threads Check">Threads Check</option><option value="Visual Check">Visual Check</option><option value="Specification">Specification</option><option value="Batch no">Batch no</option><option value="Mfg.Date">Mfg.Date</option><option value="Exp.Date">Exp.Date</option></datalist><td><input type="text" list="inpsepci" id="inpspec" ><datalist id="inpsepci"><option value="AsperPO">AsperPO</option><option value="Damage">Damage</option><option value="OK">OK</option><option value="Stainless Steel">Stainless Steel</option><option value="Gaues">Gaues</option><option value="Mild Steel">Mild Steel</option><option value="As per Drawing">As per Drawing</option><option value="Cast Iron">Cast Iron</option><option value="Copper">Copper</option><option value="Aluminium">Aluminium</option><option value="Brass">Brass</option><option value="Spring Steel">Spring Steel</option><option value="Tool Steel">Tool Steel</option><option value="Nylon">Nylon</option><option value="CRGO">CRGO</option><option value="EN1">EN1</option><option value="EN2">EN2</option></datalist></td><td><input type="text" list="act1" id="inpact10" class="tb3"><datalist id="act1"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act2" id="inpact20" class="tb3"><datalist id="act2"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act3" id="inpact30" class="tb3"><datalist id="act3"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act4" id="inpact40" class="tb3"><datalist id="act4"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act5" id="inpact50" class="tb3"><datalist id="act5"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><img src="delete.gif" height="42" width="42" alt="idata" class="del"></td></tr>');
        });

try replacing .after() with .append() please note, .after() will add your row after each occurrence of tr:last. hence when you append row, it will obviously increment refer jquery doc for more info..

http://api.jquery.com/after/

--- Edit ---

try removing html for #addrow click

$('#addrow').click(function(e) {
    $('#tab_logic tr:last').after('<tr><td><input type="text" list="inppara" id="inpparameter" ><datalist id="inppara"><option value="TypeRating">TypeRating</option><option value="Operation Check">Operation Check</option><option value="Ext.Apperance">Ext.Apperance</option><option value="Verify TC">Verify TC</option><option value="Material">Material</option><option value="Dimension Check">Dimension Check</option><option value="Threads Check">Threads Check</option><option value="Visual Check">Visual Check</option><option value="Specification">Specification</option><option value="Batch no">Batch no</option><option value="Mfg.Date">Mfg.Date</option><option value="Exp.Date">Exp.Date</option></datalist><td><input type="text" list="inpsepci" id="inpspec" ><datalist id="inpsepci"><option value="AsperPO">AsperPO</option><option value="Damage">Damage</option><option value="OK">OK</option><option value="Stainless Steel">Stainless Steel</option><option value="Gaues">Gaues</option><option value="Mild Steel">Mild Steel</option><option value="As per Drawing">As per Drawing</option><option value="Cast Iron">Cast Iron</option><option value="Copper">Copper</option><option value="Aluminium">Aluminium</option><option value="Brass">Brass</option><option value="Spring Steel">Spring Steel</option><option value="Tool Steel">Tool Steel</option><option value="Nylon">Nylon</option><option value="CRGO">CRGO</option><option value="EN1">EN1</option><option value="EN2">EN2</option></datalist></td><td><input type="text" list="act1" id="inpact10" class="tb3"><datalist id="act1"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act2" id="inpact20" class="tb3"><datalist id="act2"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act3" id="inpact30" class="tb3"><datalist id="act3"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act4" id="inpact40" class="tb3"><datalist id="act4"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><input type="text" list="act5" id="inpact50" class="tb3"><datalist id="act5"><option value="YES">YES</option><option value="NO">NO</option><option value="OK">OK</option><option value="NOT OK">NOT OK</option></datalist></td><td><img src="delete.gif" height="42" width="42" alt="idata" class="del"></td></tr>');
  });
Abhinav
  • 1,202
  • 1
  • 8
  • 12
  • I'm sorry I didn't get, whats difference between horizontal and below? did you mean to say rows are appending in between but not below last? – Abhinav Mar 14 '17 at 04:54
  • $('#tab_logic tr:last').append. rows will be added beside . $('#tab_logic').append rows will be added below the last row of table – kavi Mar 14 '17 at 04:56
  • so whats your prblm into adding it below last row, thats what you wand right? I'm sorry to ask to much but need to understand to help you better. :) – Abhinav Mar 14 '17 at 04:58
  • no issues. i have tried as $('#tab_logic ').append. rows are adding . but as usual same problem happening. Please check the image – kavi Mar 14 '17 at 05:02
  • why are you adding `html` into `click` event – Abhinav Mar 14 '17 at 05:10
  • since add row are resides on pop up – kavi Mar 14 '17 at 05:15
  • Though i added as $('#addrow').click(function(e) {}-- the issue is retaining! – kavi Mar 14 '17 at 05:18
  • Thanks! Please let me know once you find it – kavi Mar 14 '17 at 05:30
0

Seems like, add row triggers - event multiple/double times whenever we clicks on the button. so added a code to unbind all event handler that resolved my issue. Any how i need to findout what is making double event trigger.

$(".popup").unbind();

As per the comments given in jQuery click events firing multiple times

Community
  • 1
  • 1
kavi
  • 163
  • 1
  • 9