我有一个将在点击时触发的功能(使用jQuery)。
我不明白为什么以下内容不起作用并显示 undefined 。
var testFunc = function(event) {
var data = event.data;
var category = data.category;
var action = data.action;
var label = data.label;
console.debug(data);
// prints:
// {'category': 'CCC', 'action': 'AAA', 'label': 'LLL'}
console.debug(data.category);
// prints: undefined
console.debug(category);
// prints: undefined
console.debug(data[category]);
// prints: undefined
};
$(document).ready(function() {
$('.test').on('click', function() {
var jsonData;
try {
jsonData = JSON.parse($(this).data('test'));
}
catch (e) {
// I guess here is the problem:
jsonData = $(this).data('test');
// ..but why JSON.parse doesn't work
}
try {
testFunc({ data: jsonData });
} catch (e) {
}
});
});
HTML:
<a href="about:blank" target="_blank" class="test"
data-test="{'category': 'CCC'}">click event triggered here</a>
如何访问event.data.category?
答案 0 :(得分:2)
event.data
是你小提琴中的一个字符串。
那是因为data-test
字段中的JSON无效。
因此,在解析它时会传入异常处理程序,并使用String本身。
(根据http://jsonlint.com/,似乎你不能在JSON中使用单引号)
正如其他地方所指出的,您可以在数据属性中使用双引号来修复问题。
请注意,data[category]
无论如何都不会有效,因此您仍然可以获得undefined
。
答案 1 :(得分:2)
您的JSON数据格式不正确。您需要对键值使用双引号。
df[grep('1{3,}', df$history),]
答案 2 :(得分:0)
要访问嵌套对象属性,请使用[]
表示法,例如:
event['data']['category']
答案 3 :(得分:0)