Javascript 创建的jQuery按钮未侦听单击
我有一个小循环,其中为阵列中的每个产品创建了一个新的buy按钮 在循环中,将创建一个buy按钮,并应单击该按钮。但是,未注册单击。但按钮确实出现在我的页面中Javascript 创建的jQuery按钮未侦听单击,javascript,jquery,Javascript,Jquery,我有一个小循环,其中为阵列中的每个产品创建了一个新的buy按钮 在循环中,将创建一个buy按钮,并应单击该按钮。但是,未注册单击。但按钮确实出现在我的页面中 var list = jQuery('<ul/>'); for (var i in perSecondProducts) { var product = perSecondProducts[i]; var listItem = jQuery('<li/>'); listItem.html(i
var list = jQuery('<ul/>');
for (var i in perSecondProducts) {
var product = perSecondProducts[i];
var listItem = jQuery('<li/>');
listItem.html(i + '(' + product['price'] + ')');
var buyButton = jQuery('<button />');
buyButton.html('Buy');
buyButton.data('price', product['price']);
buyButton.data('scorePerSecondUpgrade', product['scorePerSecondUpgrade']);
listItem.append(buyButton);
buyButton.click(function () {
console.log('123123');
});
list.append(listItem);
}
$('.productsPerSecondList').html(list.html());
var list=jQuery(“
”);
用于(产品中的var i){
var乘积=产品[i];
var listItem=jQuery(“”);
html(i+'('+product['price']+');
var buyButton=jQuery(“”);
html('Buy');
数据('price',产品['price']);
数据('scorePerSecondUpgrade',产品['scorePerSecondUpgrade']);
追加(buyButton);
Buy按钮。单击(函数(){
console.log('123123');
});
list.append(listItem);
}
$('.productsPerSecondList').html(list.html());
更改:
$('.productsPerSecondList').html(list.html());
致:
当您使用.html()
时,您没有添加刚刚创建的
和按钮。您正在添加与它们具有相同源代码的新HTML,即所有内容的副本。因此,您无法获得任何事件绑定
您还可以通过使用事件委派来解决这个问题,如Rajaprabhu Aravindasamy的回答所示。然后绑定不是到特定的元素,而是到与选择器匹配的所有元素。这是实现这一点的常用惯用方法。以下代码通过将所有未来的类元素“butt”订阅到单击事件来工作。我还演示了如何获取单击按钮的li元素以及如何操作它。您可以在事件处理程序中使用$(this)来获取单击的特定按钮
$(document).on('click', '.butt', function () {
$(this).parent().append('1231');
console.log('123123');
});
我使用了Rajaprabhu Aravindasamy的答案,但添加了更多代码来澄清它。
整个代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Home</title>
<script src="http://code.jquery.com/jquery-latest.min.js"
type="text/javascript"></script>
</head>
<body>
<div class="productsPerSecondList">
</div>
<script>
var list = jQuery('<ul/>');
var perSecondProducts = [
{
price: "5",
scorePerSecondUpgrade:"3"
},
{
price: "1",
scorePerSecondUpgrade:"2"
}
];
for (var i in perSecondProducts) {
var product = perSecondProducts[i];
var listItem = jQuery('<li/>');
listItem.html(i + '(' + product['price'] + ')');
var buyButton = jQuery('<button />');
buyButton.addClass('butt');
buyButton.html('Buy');
buyButton.data('price', product['price']);
buyButton.data('scorePerSecondUpgrade', product['scorePerSecondUpgrade']);
listItem.append(buyButton);
list.append(listItem);
}
$('.productsPerSecondList').html(list.html());
$(document).on('click', '.butt', function () {
$(this).parent().append('1231');
console.log('123123');
});
</script>
</body>
</html>
家
var list=jQuery(“
”);
var产品=[
{
价格:“5”,
第二次升级:“3”
},
{
价格:“1”,
第二次升级:“2”
}
];
用于(产品中的var i){
var乘积=产品[i];
var listItem=jQuery(“”);
html(i+'('+product['price']+');
var buyButton=jQuery(“”);
buyButton.addClass('butt');
html('Buy');
数据('price',产品['price']);
数据('scorePerSecondUpgrade',产品['scorePerSecondUpgrade']);
追加(buyButton);
list.append(listItem);
}
$('.productsPerSecondList').html(list.html());
$(文档).on('click','.butt',函数(){
$(this.parent().append('1231');
console.log('123123');
});
你的问题是什么?@JK。他所做的是实现这一点的另一种方式,因为他在创建新元素之后绑定它。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Home</title>
<script src="http://code.jquery.com/jquery-latest.min.js"
type="text/javascript"></script>
</head>
<body>
<div class="productsPerSecondList">
</div>
<script>
var list = jQuery('<ul/>');
var perSecondProducts = [
{
price: "5",
scorePerSecondUpgrade:"3"
},
{
price: "1",
scorePerSecondUpgrade:"2"
}
];
for (var i in perSecondProducts) {
var product = perSecondProducts[i];
var listItem = jQuery('<li/>');
listItem.html(i + '(' + product['price'] + ')');
var buyButton = jQuery('<button />');
buyButton.addClass('butt');
buyButton.html('Buy');
buyButton.data('price', product['price']);
buyButton.data('scorePerSecondUpgrade', product['scorePerSecondUpgrade']);
listItem.append(buyButton);
list.append(listItem);
}
$('.productsPerSecondList').html(list.html());
$(document).on('click', '.butt', function () {
$(this).parent().append('1231');
console.log('123123');
});
</script>
</body>
</html>