创建jQuery按钮不听单击

时间:2014-05-31 07:42:23

标签: javascript jquery

我有一个小循环,为阵列中的每个产品创建一个新的购买按钮。

在循环中,会创建一个购买按钮,并且应该单击该按钮。但是,点击没有被注册。该按钮确实出现在我的页面中。

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());

2 个答案:

答案 0 :(得分:1)

变化:

$('.productsPerSecondList').html(list.html());

为:

$('prodictsPerSecondList').empty().append(list);

当您使用.html()时,您不会添加刚刚创建的<ul>和按钮。您正在添加具有相同源代码的新HTML,即所有内容的副本。因此,您不会获得任何事件绑定。

你也可以通过使用事件委托来解决这个问题,如Rajaprabhu Aravindasamy的回答所示。然后绑定不是特定元素,而是与匹配选择器的所有元素。这是通常的,惯用的方式来实现这一目标。

答案 1 :(得分:0)

以下代码通过将所有未来的类元素“butt”订阅到click事件来工作。我还展示了如何获取单击按钮的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>