私はjQueryの.dataのメソッドを介したオブジェクトとして格納された配列にアクセスしていますが、何らかの理由で私はそれが正常に動作し、他のすべてのブラウザで IE9でネストされた配列プロパティを取得できないのはなぜですか?
var $commentdata = $comment.data('comments'),
$position = $commentdata.playtime;
IE9
にネストされたプロパティを取得することはできません。エラー:プロパティ「再生時間」の値を取得できません:これはすることができ、私はそれを修正することができますどのように、なぜオブジェクトが
nullまたは未定義である任意のアイデア - :しかしIE9で、私は次のエラーを取得します?編集:ここではDOMにデータを追加している機能です。
function getComments(oTable) {
var $array = [];
if (oTable.find('.dataTables_empty').length === 0) {
//build array of songid's to send to server
oTable.find('td').each(function() {
"use strict";
var $songdata = $(this).data('data'),
$songid = $songdata.songid,
$duration = $songdata.duration;
$array.push($songid);
});
$.ajax({
type: "GET",
dataType: "json",
async: false,
url: "/wp-content/comment_data.php",
data: 'songid=' + $array,
success: function (data) {
"use strict";
$commentarray.length = 0;
$commentarray.push(data);
//apply template to each song and render comment icons
console.log($commentarray);
$.each(data, function (key, value) {
var $songdata = data[key];
if ($songdata !== null) {
var $songid = $songdata[0].songid,
songid = 'songid' + $songid,
$commentbar = $('#comment-bar-' + $songid),
sID = $commentbar.closest('td').find('a.playable').data('playable').sID,
song = soundManager.getSoundById(sID);
$commentbar.html($.render(data[key], 'commentBarTemplate'));
$.each($songdata, function (index, value) {
var commentdata = $songdata[index],
position = commentdata.position,
cid = commentdata.id,
$templateDiv = $('#timestamped-comment-template');
//$comment = $('#comment-' + cid).find('a');
//$comment.data('comments', commentdata);
song.onPosition(position * 1000, function() {
if ($('#example').find('td').hasClass('comments-shown') === false && $templateDiv.hasClass('hover') === false && $('body').attr('looping') === '') {
showNewComment($comment);
}
});
});
}
});
}
});
}
else {
return false;
}
}
私はjQueryのに非常に新たなんだと、このコードは大きくない場合は、まだ謝罪ので、それのまわりで私の頭を取得しています。しかし、すべてのデータがDOMに正しく入れられても、IE以外のすべてのブラウザでは問題はありません。
私はちょうど気づいたことがあります...それは答えを持たないコメントにアクセスするときにエラーを発生させるように見えます。奇妙なことに!
は、ここでJSONの小さな部分が返されます。
{ "songid22" : null,
"songid23" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test",
"datasize" : "204",
"display_name" : "admin",
"id" : "5",
"playtime" : 27.450980392200002,
"position" : "56",
"posttime" : "2011-09-28 15:32:41",
"replies" : [ null ],
"songid" : "23",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test comment",
"datasize" : "204",
"display_name" : "admin",
"id" : "6",
"playtime" : 42.647058823499997,
"position" : "87",
"posttime" : "2011-09-28 16:38:37",
"replies" : [ null ],
"songid" : "23",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
}
],
"songid24" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "comment at 0:48",
"datasize" : "267",
"display_name" : "admin",
"id" : "2",
"playtime" : 17.977528089900002,
"position" : "48",
"posttime" : "2011-09-28 14:38:41",
"replies" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "haha reply",
"cid" : "2",
"display_name" : "admin",
"id" : "1",
"posttime" : "2011-09-28 15:14:56",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "next replty",
"cid" : "2",
"display_name" : "admin",
"id" : "2",
"posttime" : "2011-09-28 15:15:07",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "first reply",
"cid" : "2",
"display_name" : "admin",
"id" : "3",
"posttime" : "2011-09-28 15:15:15",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
}
],
"songid" : "24",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "asdasd",
"datasize" : "267",
"display_name" : "admin",
"id" : "3",
"playtime" : 0.74906367041199995,
"position" : "2",
"posttime" : "2011-09-28 14:43:11",
"replies" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test reply",
"cid" : "3",
"display_name" : "admin",
"id" : "5",
"posttime" : "2011-10-06 14:35:23",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test reply",
"cid" : "3",
"display_name" : "admin",
"id" : "6",
"posttime" : "2011-10-07 14:48:21",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
}
],
"songid" : "24",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.example.com/members/admin/"
},
{ "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test",
"datasize" : "267",
"display_name" : "admin",
"id" : "10",
"playtime" : 36.329588014999999,
"position" : "97",
"posttime" : "2011-10-06 14:15:12",
"replies" : [ null ],
"songid" : "24",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.songbanc.com/members/admin/"
}
],
私のコメントの検索は、さらに、「返信の巣を持っているすべてのコメントに正常に動作します。 reply = nullの場合、IEはエラーを発生させます。
EDIT2:IE上でfirebug Liteを使用してさらに調査した結果、commentdataはまだオブジェクトであることがわかりましたが、JSON構造にネストされた「返信」がないannコメントでは完全に空です。したがって、データが正しくDOMに接続されていないようで、上記のコードは上記のコードでなければなりません。しかし、他のすべてのブラウザでうまく動作するのは不思議です。
これ以上のアイデアはありませんか?解決
「データ」を設定するか、jsFiddleで例を作成するために使用しているコードを含めてください。 – Stefan
確かに...まだアラートを実行しているとき($ commentdata); IE以外のすべてのブラウザでは、それが「オブジェクト」であることを示します。 IE上で私は '定義されていません' ...そして、それが "返信"のさらなる巣を持たないときだけ、 – gordyr