Функция jquery forEach, используемая для отображения / отображения динамических элементов - PullRequest
0 голосов
/ 06 октября 2019

Я создал 3 динамические кнопки с атрибутом класса и хотел бы, чтобы они отображались при нажатии одной из них. Только один показан, а не все три.

<script>
var hyperlink;

$(function() {
    var y = 2;

    for(var i = 0; i <= 2; i++ ) {
         drawRow( i,  y );
    }
});

function drawRow( x, y ) {

    if(x == 0)
        row = $("<tr />")

    else {

        var btnName = "btn" + x;
        console.log("ln62 btnName: " + btnName);
        hyperlink = document.createElement("button");
        hyperlink.setAttribute('id', btnName);          
        hyperlink.setAttribute('class', 'btnCL');      //  class set for button
        hyperlink.innerHTML = x;

        $("#DataTable").append(row);
        row.append($("<td></td>").append(hyperlink));
        var btnName2 = "#btn" + x;
    }
}

$(document).on("click", '.btnCL', function() {

    console.log("inside doc.on ln73");
    //console.log("hyperlink: " + hyperlink.getAttribute("id"));
    $(hyperlink).each(function( i ) {
           console.log("ln76 " + i + ": " + hyperlink.getAttribute("id"));           
    });

});

</script>

Результат: ln62 btnName: btn1 ln62 btnName: btn2 ln62 btnName: btn3

внутри документа по ln73 ln76 0: btn3 // только один (1) в списке ?? s / b 3

ЛЮБАЯ ПОМОЩЬ БУДЕТ ЦЕНА.

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Это потому, что hyperlink является переменной, а не массивом. Эта строка hyperlink = document.createElement("button"); всегда будет обновлять hyperlink переменную последней созданной кнопкой.

Вместо использования each вы можете использоватьevent объект и получить цель

var hyperlink;

$(function() {
  var y = 2;

  for (var i = 0; i <= 2; i++) {
    drawRow(i, y);
  }
});

function drawRow(x, y) {

  if (x == 0)
    row = $("<tr />")

  else {

    var btnName = "btn" + x;
    console.log("ln62 btnName: " + btnName);
    hyperlink = document.createElement("button");
    hyperlink.setAttribute('id', btnName);
    hyperlink.setAttribute('class', 'btnCL'); //  class set for button
    hyperlink.innerHTML = x;

    $("#DataTable").append(row);
    row.append($("<td></td>").append(hyperlink));
    var btnName2 = "#btn" + x;
  }
}

$(document).on("click", '.btnCL', function(e) {
  console.log("inside doc.on ln73");
  console.log(e.target.getAttribute("id"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="DataTable"></table>
0 голосов
/ 06 октября 2019

Основная проблема заключается в том, что на каждой итерации цикла вы переназначаете новое значение переменной hyperlink

Все, что вам действительно нужно сделать, - это выполнить цикл по коллекции классов, и вам не нужна глобальная переменнаяна все

$(document).on("click", '.btnCL', function() {
   // current button is `this`
   console.log('Current id:', this.id);

   // loop over the class instead to see them all 
    $('.btnCL').each(function( i, el ) {
           console.log("ln76 " + i + ": " + el.id); // or this.id          
    });    
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...