Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我试图从属性值获取HTML数据时,为什么会出现错误?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 当我试图从属性值获取HTML数据时,为什么会出现错误?

Javascript 当我试图从属性值获取HTML数据时,为什么会出现错误?,javascript,jquery,html,Javascript,Jquery,Html,我有以下HTML代码: <input type = "button" id = "someID" data-ddd='{"a": 1, "b": "2"}' onclick = "someevent(this)" /> 在这一行: var d = $.parseJSON(element.data("ddd")); 我得到以下错误: TypeError:element.data不是函数 知道我为什么会出现上述错误吗?试试这个: function someevent(element

我有以下HTML代码:

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

 var d = $.parseJSON(element.data("ddd"));
我得到以下错误:

TypeError:element.data不是函数

知道我为什么会出现上述错误吗?

试试这个:

function someevent(element)
{
        var data=element.getAttribute("data-ddd");
        var d=JSON.parse(data);
        alert(d['a']);
}

我对你的代码做了一些修改

试试这个

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

$("#someID").click(function() {
    var d = $(this).data("ddd");
    alert(d.a);
});

$(“#someID”)。单击(函数(){
var d=$(此).data(“ddd”);
警报(d.a.);
});

在您的代码
元素中
是一个
HTMLInputElement
对象。与其他
HTMLElement
对象一样,它没有
.data()
方法。如果要使用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时必须使用
$.parseJSON
JSON.parse
方法。

$(元素)。数据(…)
?如果
someevent
实际上是一个偶数处理程序,那么浏览器的JS引擎将传入一个dom元素,而不是jquery对象。错误完全正确。不存在这样的函数。我如何获取数据值?知道吗?
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;
}