HTML のデータ属性に適用した一部の JSON データで奇妙な動作が発生しています。修正を使用して動作していますが、この修正を適用する必要がある理由がわかりません。jquery-1.9.0 を使用しています
ケース 1 - なしで作業する$.parseJSON()
http://reelfilmlocations.co.uk/browse-locations/
このページでは、画像の下のアイコンにデータ属性が適用されています。例としてマップ アイコンを使用します。
html は次のようになります。
<img
src="/images/Icons/map circle.fw.png" width="24" height="24"
class="icon mapLink"
data-location='{
"id":"<?php echo($row_rs_locations['id_loc']);?>",
"slug":"<?php echo($row_rs_locations['slug_loc']);?>",
"page":"<?php echo($cur_page);?>",
"lat":"<?php echo($row_rs_locations['maplat_loc']);?>",
"lng":"<?php echo($row_rs_locations['maplong_loc']);?>",
"pinType":"loc",
"name":"<?php echo($row_rs_locations['name_loc']);?>",
"linkType":"list"
}'
/>
JSON オブジェクト:
{ "id":"5", "slug":"boston-manor-house-and-park", "page":"1", "lat":"51.492341", "lng":"-0.3186064000000215", "pinType":"loc", "name":"Boston Manor House and Park", "linkType":"list" }
私はhttp://jsonlint.com/でチェックしましたが、これは実際に有効なjsonです
マップアイコンがクリックされたときに実行する次のjqueryがあります
$('.wrapper').delegate('.mapLink','click',function() {
var myData = $(this).data('location');
console.log(myData); // correctly logs json object
$('.middle_section').hide();
$('#mapContent').show();
createMarkerWithInfo(myData, true);
})
すべてが期待どおりに機能します data-location 要素は json として読み込まれ、他に何もせずに json オブジェクトとして使用できます
ケース 2 - 使用する必要がある$.parseJSON()
http://2012.reelfilmlocations.co.uk/browse-locations/
これは上記のケースとほぼ同じです (このバージョンはモバイル デバイス用に最適化されます)。
コードはほとんど同じですが、クリック イベントが data-location 要素を取得しますが、テキストは json オブジェクトではないため、使用$.parseJSON(myData)
する前に解析する必要があります。
$('.wrapper').delegate('.mapLink','click',function() {
//console.log('mapLink clicked');
var myData = $(this).data('location');
console.log(myData);// outputs text not a json object
myData = $.parseJSON(myData) //parse the data
console.log(myData);// outputs a JSON object
$('.middle_section').hide();
$('#mapContent').show();
createMarkerWithInfo(myData, true);
})
まったく同じである 2 つのスクリプトで、なぜ $.parseJSON を使用する必要があるのか 理解できません。