Calling an onclick function in for loop with a table

206 Views Asked by At

i am trying to have a button in a table column and when its clicked, i want to invoke a service with values from that row. can someone please help achieve this.

  function setResponseData(data, length) {
        var insertHTML = "<TR class=\"heading\"><TD align=\"center\">&nbsp;&nbsp;TIMESTAMP&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;OPERATION&nbsp;&nbsp;&nbsp;TYPE&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;LOG &nbsp;&nbsp;LEVEL&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;VERSION&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;TYPE&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;SESSIONID&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;PIECEID&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;SHIPMENTID&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;SYSTEM &nbsp;ORIGIN&nbsp;</TD><TD align=\"center\">&nbsp;SYSTEM &nbsp;DESTINATION&nbsp;</TD><TD align=\"center\">&nbsp;SYSTEM &nbsp;DATAORIGIN&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;DIRECT &nbsp;INJECTION &nbsp;ORGANISATION&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;PRODUCT&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;STATUS&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;STATUS&nbsp; &nbsp;&nbsp;CODE&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;STATUS MESSAGE&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;NODENAME&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;PIECENUMBER&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;TOTALPIECES&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;SYSTEMNAME&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;INSERT &nbsp;&nbsp;TIMESTAMP&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;EVENT &nbsp;CODE&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;CUSTOMERID&nbsp;&nbsp;</TD><TD align=\"center\">&nbsp;&nbsp;PAYLOAD&nbsp;&nbsp;</TD></TR>";
        //var PayloadBtn = document.createElement("BUTTON");
        
        for (var i = 0; i < length; i++) {
            var audit = data.results[i];
            //var PayloadBtn = document.createElement("BUTTON");
            //PayloadBtn.innerHTML = audit.PAYLOAD;
            
            
            
            if ((i % 2) == 0) {
                insertHTML += "<TR style='background-color:#F0F0E0'>";
            } else {
                insertHTML += "<TR style='background-color:#E0E0C0'>";
            }


            if (Boolean(audit.TIMESTAMP)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.TIMESTAMP + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.OPERATIONTYPE)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.OPERATIONTYPE + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.LOGLEVEL)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.LOGLEVEL + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.VERSION)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.VERSION + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.TYPE)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.TYPE + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SESSIONID)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SESSIONID + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.PIECEID)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.PIECEID + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SHIPMENTID)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SHIPMENTID + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SYSTEMORIGIN)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SYSTEMORIGIN + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SYSTEM_DESTINATION)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SYSTEM_DESTINATION + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SYSTEMDATAORIGIN)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SYSTEMDATAORIGIN + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
             if (Boolean(audit.DIRECT_INJECTION_ORGANISATION)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.DIRECT_INJECTION_ORGANISATION + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.PRODUCT)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.PRODUCT + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.STATUS)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.STATUS + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.STATUS_CODE)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.STATUS_CODE + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.STATUS_MESSAGE)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.STATUS_MESSAGE + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.NODE_NAME)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.NODE_NAME + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.PIECENUMBER)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.PIECENUMBER + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.TOTALPIECES)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.TOTALPIECES + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.SYSTEM_NAME)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.SYSTEM_NAME + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.INSERT_TIMESTAMP)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.INSERT_TIMESTAMP + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.EVENT_CODE)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.EVENT_CODE + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.CUSTOMERID)) {
                insertHTML += "<TD align=\"center\">&nbsp;" + audit.CUSTOMERID + "&nbsp;</TD>";
            } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
            if (Boolean(audit.PAYLOAD)) {
                insertHTML += "<TD><input class='myclass' type='button' value='Download' onclick =getPayload(${data.results[i]})/></TD>";
           } else {
                insertHTML += "<TD align=\"center\">&nbsp;</TD>";
            }
        }
        document.getElementById("contentTable").innerHTML = insertHTML;
    }


  

function getPayload(audit) {

        var param = "?";
        var flag = "false";
        if (audit.VERSION != "" && audit.SESSIONID!= "" && audit.SHIPMENTID!="" && audit.SYSTEM_NAME!="" && audit.TYPE!="") {
        
            param += "shipmentId=" + audit.SHIPMENTID;
            param += "version=" + audit.VERSION;
            param += "sessionId=" +audit.SESSIONID;
            param += "systemName=" + audit.SYSTEM_NAME;
            param += "messageType=" + audit.TYPE;
            param += "operationType=" + audit.OPERATIONTYPE;
            flag = "true";
        }

        var err = document.getElementById("errorContent");
        err.style.display = "none";

        var XHR = new XMLHttpRequest();
       
        // We setup our request
        XHR.open("GET", "/restv2/getPayloadml" + param);

I want to invoke the function getPayload when the download button is clicked, but its not calling that function.

My download button is in a for loop and are displayed in a table column. when i click a particuar button, i want that row values to be sent to the function getPayload so i am giving as onclick =getPayload(${data.results[i]. am doing something wrong here that the function is not called.

enter image description here

1

There are 1 best solutions below

0
David On

In your browser's DOM explorer, examine the result of this string literal:

"<TD><input class='myclass' type='button' value='Download' onclick =getPayload(${data.results[i]})/></TD>"

You'll find it to be, literally, this:

<TD><input class='myclass' type='button' value='Download' onclick =getPayload(${data.results[i]})/></TD>

Which is incorrect in that:

  1. There are no quotes around the onclick attribute value.
  2. ${data.results[i]} is a syntax error.

It looks like you're trying to use template literals. You should also be using double-quotes around attribute values, not single-quotes. So the string literal (template literal) would be something like this:

`<TD><input class="myclass" type="button" value="Download" onclick ="getPayload(${data.results[i]})" /></TD>`

Note the use of back-ticks to wrap the literal and the use of double-quotes around attribute values. Browsers are pretty lenient about allowing single-quotes, but in general when your code isn't doing what you expect then the first thing to do is ensure that it's at least technically syntactically correct.