1

別の関数からそのデータにアクセスしようとするまで、正常に動作しているように見えるリスト要素にjavascriptオブジェクトを格納しようとしています。

これが私のjsfiddleです:http://jsfiddle.net/RaUxB/2/

これが私のJavaScriptです:

var showData = function (li) {
    // get the stored data
    var d = $.data(li, 'testData');
    if (typeof(d) === 'undefined')
        alert ('showData() - data is undefined!');
    else
        alert ('showData() - number: [' + d.number+ '], text: [' + d.text + ']');
};

var doStuff = function () {
    $('#list').children().each(function(ix, item) {
        showData(item);
    });
};

$(document).ready(function() {
    // create a list item
    var li = $('<li>List Item 1 - Click Me!</li>').appendTo('#list');

    // store some data in it
    $.data(li, 'testData', {number:1, text:'test 1'});

    // show the data - this works!!!
    showData(li);

    // assign a click handler that will also show the data
    $(li).click(function() {
        showData(this); // this doesn't work!!!
    });
});

ここに私のHTMLがあります:

<ul id="list"></ul>
<p><a href="#" onclick="javascript:doStuff();return(false);">Try This Way</a></p>

</p>

4

2 に答える 2

2

$.dataDOM 要素を表す jQuery オブジェクトではなく、生のオブジェクトを取ります。

呼び出し$.data($(...))は、要素ではなく、その jQuery オブジェクト ラッパーにデータを関連付けます。

を使用する必要があります$(...).data()。これは機能します。
または、に渡しelem[0]$.data()、あらゆる場所で生の DOM 要素を操作します。

于 2012-12-11T22:31:39.540 に答える
0

これは、最初に を呼び出したときに.showData(li)、が格納されているのがLIであるためです。.data()

.click()これをイベントに追加してみてください:

-this- 要素にデータを保存する必要があります。

$(li).click(function() {
    // store some data into THIS - now the correct .data will be stored
    $.data(this, 'testData', {number:1, text:'test 1'});
          // ^^

    showData(this); // this (now has data) and will work
});

jsFiddle デモ

于 2012-12-11T22:36:56.520 に答える