Javascript变量无法访问

时间:2015-06-01 14:34:33

标签: javascript jquery

我有一个将在点击时触发的功能(使用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?

FIDDLE:http://jsfiddle.net/ytqp45wj/

4 个答案:

答案 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)

sbt assembly

JSFiddle

您需要拥有一个有效的JSON对象,因此您需要使用JSON表示法访问它。