我有这样的事情:
for (var i = 1; i <= numPages; i++)
{
buttons.append($("<button onclick='getJSON(i)'>"+i+"</button>"));
}
现在,在getJSON()函数中传递i似乎不起作用 任何想法如何解决这个问题?
答案 0 :(得分:3)
其他回答者已经描述了你如何做到这一点 但是,我会建议另一种方式:
for (var i=1; i<=numPages;i++)
{
$("<button/>")
.addClass('myClass')
.attr('data-my-id', i)
.text(i)
.appendTo(buttons);
}
$(document).on('click', '.myClass', function() {
getJSON($(this).attr('data-my-id'));
});
它将生成以下HTML:
<button class='myClass' data-my-id='1'>1</button>
<button class='myClass' data-my-id='2'>2</button>
<button class='myClass' data-my-id='3'>3</button>
<button class='myClass' data-my-id='4'>4</button>
etc.
为什么这种方法更好?
onclick
属性jQuery比本机JavaScript慢,但只有当我们谈论数千个元素时才重要。否则,更容易编写,读取和支持代码。
此外,这是一篇很好的文章,描述了为什么你不应该使用onclick
属性`:
jQuery.click() vs onClick
答案 1 :(得分:1)
buttons.append($("<button onclick='getJSON("+i+")'>"+i+"</button>"));
你需要连接正确,就像你对另一个i
答案 2 :(得分:-1)
将i作为变量传递给getJSON方法。你错误地把它作为一个字符串发送了。
for (var i=1;i<=numPages;i++)
{
buttons.append($("<button onclick='getJSON("+i+")'>"+i+"</button>"));
}