在.onclick函数中的方法中调用选定的循环元素

时间:2013-06-15 14:05:45

标签: javascript jquery loops

我尝试使用第二个参数作为循环中的当前选定元素来调用方法addProject()。但是当我打电话给null时,参数的引用是addProject()

我认为当我使用.onclick按钮时,循环中当前所选参数的引用会丢失。但是,我怎样才能以不同的方式将这个论点赋予方法呢?

$(document).ready(function () {
    for (var i = 0; i <= proj_array.length - 1; i++) {
        var h = document.createElement("h1");
        var p = document.createElement("p");
        p.innerHTML = proj_array[i].projectdescription;
        h.innerHTML = proj_array[i].projectname;

        $(".projectsList").append(h).append(p);

        var button = document.createElement("button");
        button.style.width = "70px";
        button.style.height = "27px";
        button.innerHTML = "Add";

        $(button).addClass("enable");
        button.onclick = function () {
            if ($(button).hasClass("enable")) {
                addProject(this, proj_array[i]);
            }
        }
        $(p).append(button);
    }
    $(".projectsList").accordion();
});

2 个答案:

答案 0 :(得分:3)

你需要一个闭包:

(function(proj) {
    $(button).on('click', function() {
        if ( $(this).hasClass("enable") ) {
            addProject(this, proj);     
        }
    });
})(proj_array[i]);

或者你可以坚持使用jQuery而不是太复杂:

$(function() {
    $.each(proj_array, function(i, proj) {
        var h = $('<h1 />', {html: proj.projectdescription}),
            p = $('<p />', {html: proj.projectname}),
            button = $('<button />', {
                                      width  : '70px',
                                      height : '27px',
                                      html   : 'Add',
                                      'class':'enable'
                                     });

        button.on('click', function() {
            if ($(this).hasClass("enable")) {
                addProject(this, proj);     
            }
        });
        $(p).append(button);
        $(".projectsList").append(h, p).accordion();
    });
});

答案 1 :(得分:1)

将其存储为data-*属性:

var button = document.createElement("button");
$(button).data('proj', proj_array[i]);

onclick中,您可以检索它:

if($(this).hasClass("enable")) {
    addProject(this, $(this).data('proj'));
}

在点击处理程序中也使用$(this)而不是$(button)