1

動的リストビューを作成し、クリックしたリストビューの行からデータを取得したい (データはリストビューに表示されるため、「追加」は完璧に機能します)、クリックすると「未定義」と表示され、そのデータを「x」に入れようとしましたが、その理由がわかりません!

私のコード:

for (var i = 0; i < json_parsed.Categories.length; i++){
        var cars= json_parsed.Categories[i];


        $('#categoryList').append($('<li   data-categoryId = cars.car_name>').html(' <a href="#"  onclick = "temp()" >'+cars.car_name+</a>'));
}


function temp () {
   var x = $(this).data('categoryId');  
   alert (x);   
};

ありがとう

4

3 に答える 3

2

jQuery を使用しているためonclick、以下のようにイベントをバインドできます。

$('#categoryList').on('click', 'li', function () {
    var x = $(this).data('categoryId');
    alert(x);
});

完全なコード: (for ループ内のいくつかのものを修正)

var cars;
for (var i = 0; i < json_parsed.Categories.length; i++){
   cars = json_parsed.Categories[i];
   $('#categoryList').append('<li data-categoryId="' + cars.car_name + '"><a href="javascript:void(0)" >' +cars.car_name + '</a>');
}    

$('#categoryList').on('click', 'li', function () {
    var x = $(this).data('categoryId');
    alert(x);
});

編集:

ありがとう、でもうまくいきません...ここにコードを追加します! ありがとう!

jQuery バージョン 1.6.4 を使用していることを忘れていました。

とにかく、以下のようにクリックハンドラーを変更します。

$('#categoryList').delegate('li', 'click', function() {
    var x = $(this).data('categoryid');
    alert(x);
});

デモ

于 2012-05-24T20:10:00.777 に答える
0

Live は、バインドされた動的コンテンツを処理する従来の方法です。ただし、jQuery では、jQuery 1.7 以降では on() を使用することを推奨しています。http://api.jquery.com/live/

例:

$('element').on('click', function(){//Do something});
于 2012-05-24T20:08:30.230 に答える
0

ライブイベントを使用する必要があります。つまり、ページの読み込み時に作成されず、後で作成される要素にバインドする eventHandler です。今後。

// delegate to #categoryList if it already in DOM in page load

$('#categoryList').on('click', 'li', function() {
   var x = $(this).data('categoryId');  
   alert(x);
});
于 2012-05-24T20:03:04.547 に答える