javascript - 将事件处理程序分配给 for 循环中的每个按钮

标签 javascript jquery

我试图为通过 for 循环生成的每个按钮分配一个 onclick 属性,但没有成功。该循环生成一个填充有搜索结果的表,并且该按钮必须将一个值传递给 JPlayer。以下代码使用按钮 + i plain 的类不起作用,尽管我不确定为什么。删除 i 变量显然只会将事件处理程序分配给数组中的最后一个元素,确实如此。我在这里浏览了一些类似的问题,因为我认为这是 JS 循环的常见陷阱,但我无法让任何答案适用于这种情况。

function displayResults(searchData){

    var numResults = searchData.results.length;

    $("#searchResults").html("");

    var table = document.createElement("table");
    table.setAttribute("class", "table");


    for(var i = 0;i < numResults; i++) {
        var resultTr = document.createElement("tr");
        var results = searchData.results[i];

        var resultArtist = document.createElement("td");
        resultArtist.appendChild(document.createTextNode(results.artist));
        var resultSong = document.createElement("td");
        resultSong.appendChild(document.createTextNode(results.songTitle));
        var resultAlbum = document.createElement("td");
        resultAlbum.appendChild(document.createTextNode(results.album));
        var resultDisk = document.createElement("button");      
        resultDisk.setAttribute("class", "playButton" +i);      

         $( ".playButton" +i).on( "click", { value: results.diskLocation }, function( event ) {

                player(event.data.value);
              });

        resultDisk.appendChild(document.createTextNode("play"));

        resultTr.appendChild(resultArtist);
        resultTr.appendChild(resultSong);
        resultTr.appendChild(resultAlbum);
        resultTr.appendChild(resultDisk);
        table.appendChild(resultTr);
        $("#searchResults").append(table);
    }
}

我尝试过使用this,但我似乎也无法使其工作。那么,如何正确地将事件处理程序分配给循环中动态生成的元素呢?

最佳答案

问题是您在将新按钮添加到 DOM 之前使用了 $( ".playButton"+i) 选择器,因此它找不到任何内容。将其更改为:

$(resultDisk).on("click", { value: results.disklocation }, function(event) {
    player(event.data.value);
});

此外,$("#earchResults").append(table) 应该位于 for 循环之外。在循环完全填充表格后,您只需追加表格一次。

关于javascript - 将事件处理程序分配给 for 循环中的每个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638868/

相关文章:

jquery - 我如何使用 jquery 在 div 中传播图像

javascript - TypeScript hasOwnProperty 等效项

php - codeigniter jquery 的自动完成功能不起作用,但没有错误

javascript - 为什么调用 History.pushState() (或 .replaceState())会触发 'popstate' 事件?

jquery - 如何在自动完成中找到所选元素的类别?

jquery - 显示/隐藏具有相同类别的div

javascript - Vue.js 中的国际化

php - Javascript Tabber 重新加载

php - 使用 Javascript/PHP 设置图像的时间间隔

javascript - Bootstrap Modal 未在表单提交上显示