JS将onClick操作设置为在循环内创建的Button

时间:2017-06-19 04:01:38

标签: javascript html generated

如何定义在此循环中创建的按钮的onClick属性?.JQuery似乎根本不适用于该类。

    for(started somewhrere...

        var button = document.createElement('button')
        var div = document.createElement('div')
        var img = document.createElement('img')
            img.src = "../img/download.png"
        var p = document.createElement('p')
            p.appendChild(document.createTextNode("Descargar"))

        div.appendChild(img);
        div.appendChild(p);
        button.appendChild(div);

        button.onClick = "DOSOMETHINGFFS()"

        button.className = "download"

     for end somewhere...}
function DOSOMETHINGFFS(){
    alert("no")
}

BTW JQuery实际上并没有真正帮助

$(".download").click(function() {
    alert("ok")
});

3 个答案:

答案 0 :(得分:1)

确保您实际上已将元素添加到页面中(例如下面的container.appendChild),并且拼写错误onclick。 (你有一个大写字母C.)否则,我认为你所做的是好的,但是分配实际的函数而不是带有调用函数调用的JavaScript代码的字符串会更好:



function doSomething(url){
    console.log("download " + url);
}

var container = document.getElementById("container");
for (var i = 0; i < 5; i++) {
    var button = document.createElement('button');
    button.innerText = "click me";
    button.className = "download";
    button.onclick = (function (url) {
        return function () {
            doSomething(url);
        };
    })("URL #" + i);
    container.appendChild(button);
}

$('.download').click(function () {
    console.log("clicked from jQuery handler");
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
&#13;
&#13;
&#13;

修改

还使用jQuery添加处理程序。这也很好。

编辑2

更改了onclick示例,为每个按钮添加了不同的参数。有几种方法可以实现这一点,但我使用了immediately-invoked function expression (IIFE)

答案 1 :(得分:1)

这将处理动态添加到dom的任何元素的点击事件。

$('body').on("click",".download" , function() {
    alert("ok");
});

答案 2 :(得分:0)

$(".download").click(function() {
    alert("ok")
});

如果按钮已经在DOM中,上面的代码将起作用,因为你是动态创建的,所以你需要将父元素上的点击绑定为

$(document).on('click','.download',function(){
  alert('ok');
});