我尝试使用第二个参数作为循环中的当前选定元素来调用方法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();
});
答案 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)
。