0

いつどのテクニックを使うべきか、頭を悩ませようとしています。彼らはそれを単に「学習曲線」と呼んでいると思います。

次のように記述したときにクリック関数が機能するのはなぜですか。

$(document).ready(function () {

    var Item = {
        list: function() {
            $.getJSON("output.php", function(data) {
                $.each(data, function(key, val) {

                    $("ul#list").append(
                        '<li id="id' + val.id + '" class="itemContainer item' + val.category + '">' +
                        '<div class="item">' +
                            '<button name="plus" type="button" value="0" class="itemPlus">+</button>' +
                            '<button name="minus" type="button" value="0" class="itemMinus">-</button>' +
                        '</div>' +
                        '</li>'
                    );
                });

                $("button").on("click", function() {
                    alert($(this).attr("name"));
                });
            });


        }
    }

    Item.list();


});

このようには機能しません: ( $("button").on... をオブジェクトの外に移動したことに注意してください)

$(document).ready(function () {

    var Item = {
        list: function() {
            $.getJSON("output.php", function(data) {
                $.each(data, function(key, val) {

                    // HTML for Items. jQuery UI Templates?
                    // Select where list starts
                    $("ul#list").append(
                        '<li id="id' + val.id + '" class="itemContainer item' + val.category + '">' +
                        '<div class="item">' +
                            '<div class="catLabel"><div class="catColor catColor' + val.category + '"></div></div>' +
                            '<h2 class="itemTitle">' + val.title + '</h2>' +
                            '<img class="itemPic" src="img/noPic.gif" alt="No Picture Yet">' +
                            '<p class="itemDesc">' + val.desc + '</p>' +
                            '<hr/>' +
                            '<p class="itemDayPrice"><span class="itemDays">1</span> <a href="#">Day</a> Rental <sup>$</sup><span class="itemPrice">' + val.price + '</span></p>' +
                            '<button name="plus" type="button" value="0" class="itemPlus">+</button>' +
                            '<button name="minus" type="button" value="0" class="itemMinus">-</button>' +
                        '</div>' +
                        '</li>'
                    );
                });


            });


        }
    }

    Item.list();

    $("button").on("click", function() {
        alert($(this).attr("name"));
    });

});

内部に必要なjQueryセレクターなのか、クリック機能自体なのかわかりません。これを理解する助けがあれば大歓迎です。そのようなコードを書くより良い方法はありますか?

私のスタイルは恐ろしいと感じているので、jsコードの書き方に関するアドバイスもいただければ幸いです。

前もって感謝します!

4

2 に答える 2

1

このようにしてみてください。これは、それを委任するために必要な挿入されたコンテンツです。

$("ul#list").on("click", "button", function() {
     alert($(this).attr("name"));
});
于 2013-01-09T12:03:28.177 に答える
1
$(document).on("click", "button", function() {
    alert($(this).attr("name"));
});

要素を動的に追加しました。それらは委譲されるべきです。それで、Above Thing を使用して機能させます。

于 2013-01-09T11:59:21.093 に答える