我有这个HTML代码:

<input type = "button" id = "someID" data-ddd='{"a": 1, "b": "2"}' onclick = "someevent(this)" />


活动实施:

function someevent(element) {
    var d = $.parseJSON(element.data("ddd"));
    alert(d.a);
}


在这一行上:

 var d = $.parseJSON(element.data("ddd"));


我收到以下错误:


  TypeError:element.data不是函数


知道为什么我会收到上述错误吗?

最佳答案

在您的代码中,element是一个HTMLInputElement对象。与其他.data()对象不同,它没有HTMLElement方法。如果要使用jQuery .data()方法,则应首先创建一个jQuery对象:

$(element).data("ddd");


另请注意,jQuery .data()方法在后台尝试$.parseJSON,因此无需解析数据,即它返回相应的JavaScript结构:

function dataAttr( elem, key, data ) {
    var name;

    // If nothing was found internally, try to fetch any
    // data from the HTML5 data-* attribute
    if ( data === undefined && elem.nodeType === 1 ) {
        name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
        data = elem.getAttribute( name );

        if ( typeof data === "string" ) {
            try {
                data = data === "true" ? true :
                    data === "false" ? false :
                    data === "null" ? null :
                    // Only convert to a number if it doesn't change the string
                    +data + "" === data ? +data :
                    rbrace.test( data ) ? jQuery.parseJSON( data ) :
                    data;
            } catch ( e ) {}

            // Make sure we set the data so it isn't changed later
            dataUser.set( elem, key, data );
        } else {
            data = undefined;
        }
    }
    return data;
}


如果使用.attr()而不是.data()方法,则要解析JSON,必须使用$.parseJSONJSON.parse方法。

关于javascript - 尝试从属性值获取HTML数据时为什么会出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30175519/

10-11 22:10
查看更多