我正在生成一个flash SWF列表,该信息来自一个ajax调用,它返回一个json对象,我循环使用我的makeAppRow函数创建数据行。
makeAppRow = function(myData){
var myStr = '<div class="fileEntry">'
myStr = myStr +'<div class="appDate">'+dateFormat(myData.date_swf, "dS mmmm, yyyy, h:MM TT")+'</div>'
myStr = myStr +'<div class="appName">'+myData.name_swf+'</div>'
myStr = myStr +'<div class="appOptions" data>'
myStr = myStr +'<div class="gotoAppBtn" data-options="'+myData+'">Open App</div>'
myStr = myStr +'</div>'
myStr = myStr +'</div>'
$('#appData').append(myStr);
}
我需要将json数据附加到gotoAppBtn
,以便在单击时我可以读取附加的json对象的数据并在我的单击函数中使用它,因为你可以看到我已经尝试使用html5数据嵌入数据,但我无法使其工作。
<div class="gotoAppBtn" data-options="'+myData+'">Open App</div>
我有一个功能,以便在单击按钮时加载swf。
$('.gotoAppBtn').live('click', function(){
//alert('button clicked')
var myData = $(this).data("options")
alert('../userfiles/'+myData.id_ugp+'/'+myData.id_swf+'/'+myData.launchfile_swf+'')
console.log(myData);
var flashvars = {};
var params = {};
params.menu = "false";
params.quality = "best";
params.scale = "noscale";
var attributes = {};
attributes.id = "flashAppDisplay";
attributes.name = "flashAppDisplay";
swfobject.embedSWF(
'../userfiles/'+myData.id_ugp+'/'+myData.id_swf+'/'+myData.launchfile_swf+'', 'flashAppDisplay', myData.width_swf, myData.height_swf, myData.version_swf ,"../FAVideo/expressInstall.swf", flashvars, params, attributes)
});
但数据似乎并不存在,有关我出错的地方的指示,还是更好的方法来实现这一目标?
答案 0 :(得分:1)
在将myData
javascript对象放入属性之前,需要将其转换为字符串。
从json2.js查看JSON.stringify
。
您也可以使用.data()函数
$('#appData .gotoAppBtn:last').data("options",myData)
答案 1 :(得分:1)
如果您使用jquery创建HTML,则无需使用data-
属性,因为您可以使用$.data
设置数据。这是makeAppRow函数的严格jQuery版本。
$('<div class="fileEntry"></div>')
.append('<div class="appDate"></div>')
.find('.appDate')
.html(dateFormat(myData.date_swf, "dS mmmm, yyyy, h:MM TT"))
.end()
.append('<div class="appName"></div>')
.find('.appName')
.html(myData.name_swf)
.end()
.append('<div class="appOptions"></div>')
.find('.appOptions')
.append('<div class="gotoAppBtn">Open App</div>')
.find('.gotoAppBtn')
.data(myData)
.end()
.end()
.appendTo('#appData')
答案 2 :(得分:1)
您可以使用jquery .data()存储与html元素关联的任意数据。查看文档,您可以在makeAppRow
函数 -
$('#appData').append(myStr);
//After appending
div = $("div.gotoAppBtn")[0];
$.data(div, "data", { options: myData });
然后像这样检索它: -
$('.gotoAppBtn').live('click', function(){
//alert('button clicked')
div = $("div.gotoAppBtn")[0];
var myData = $.data(div, "data").options