duk3csmaj0r
duk3csmaj0r

Reputation: 25

How to add unique Id's to html tags

I have a function in javascript that creates a bootstrap card with 3 textareas in it.

var AddCard = function() {  
  const card =
                ` <div class="card aircat-card-border">
       <div class="card-header bg-info">
          <h5 style="font-weight: bold">Additional Entry</h5>
       </div>
       <div id="pnlEntry" class="bg-secondary">
          <div class="pt-2 form-group">

             <Label Class="row pl-3" runat="server">Detailed Action:</Label>
             <textarea  style="width: 100%;" class="form-control form-control-sm" id="txtEngrActionDesc2" runat="server" cols="50" rows="2" ></textarea>

             <Label Class="row pl-3" runat="server" >IAW:</Label>
             <textarea  style="width: 100%;" class="form-control form-control-sm" id="txtEngrIAW2"
             runat="server" cols="50" rows="2" maxlength="2000"></textarea>

             <Label Class="row pl-3" runat="server">Discrepancy Narrative:
             <Label Class="text-dark small" runat="server"> 
             </Label>(200 Character Limit)</Label>
             <textarea  style="width: 100%;" class="form-control form-control-sm" 
              id="txtEngrDiscrepNarrative2"
             runat="server" cols="50" rows="2" maxlength="200"></textarea>
                                
            
               <Label runat="server">Clcik to save this entry to the alert:</Label>
               <a id="btnSaveEntry"  class="btn btn-success btn-sm ">Save</a>
            
         </div>
      </div>
  </div> `

            const mainDiv = document.getElementById("divEntryPanel");
            mainDiv.innerHTML += card
            document.getElementById("divEntryPanel").style.display = "inline"; 
}

With the creation of each card, I want each textarea to have unique id's. I've written javascript functions that are supposed to append unique id's to the tags, but they weren't successful. Any suggestions?

var AddDetailsFunc = function () {
            AddCard();
            $.unblockUI();

            $.each(function (index, entry) {
                    CreateEntry(entry.Key,'', '', '');
            });
        }

        var CreateEntry = function (entryId, DA, IAW, DN) {
            var txtDA = $(' id="txtEngrActionDesc2' + entryId + '" type="text" maxlength="2000"').addClass('form-control').val(DA);
            var txtIAW = $('input id="txtEngrIAW2' + entryId + '" type="text" maxlength="2000"').addClass('form-control').val(IAW);
            var txtDN = $('<input id="txtEngrDiscrepNarrative2' + entryId + '" type="text" maxlength="200">').addClass('form-control').val(DN);

            var idTD = $('<td>').addClass('text-center').append(entryId);
            var DATD = $('<textarea>').append(txtDA);
            var IAWTD = $('<textarea>').append(txtIAW); 
            var DNTD = $('<td>').addClass('text-center').append(txtDN);
            
            textarea.append(idTD).append(DATD).append(IAWTD).append(DNTD);
            $('#divEntryPanel').append(textarea);

        }

Upvotes: 0

Views: 706

Answers (1)

sairfan
sairfan

Reputation: 1062

As id is attribute of textarea tag, it should go like this

var textarea = $('<textarea>');
textarea.attr('id', 'someid');
$('#main').append(textarea);

Rather than doing it in a string variable build xml nodes. and in loop you can use index or key value to make it unique

$.each(function (index, entry) {
    var textarea = $('<textarea>');
    textarea.attr('id', 'name' + index);
    //textarea.attr('id', 'name' + entry.key);  // incase its unique 
    $('#main').append(textarea);
});

should out put like id='name1' for next tag id='name2'

Upvotes: 1

Related Questions