无法从jquery'this'对象中找到.attr

时间:2013-01-07 22:19:36

标签: javascript jquery json

我正在尝试从jquery中的html输入中查找数据属性。运用     以下代码中的$(this).attr("data-jsonid");

$.fn.serializeObject = function () {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function () 
        {
            if(!isNaN(this.name))
            {
                var currentId = $(this).attr("data-jsonid");

                if (currentId !== undefined)
                {
                    alert(currentId);
                }
                if (o[this.name] !== undefined) 
                {
                    if (!o[this.name].push) 
                    {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } 
                else 
                {
                    o[this.name] = this.value || '';
                }
            }
        });
        return o;
    };
    $(function () {
        $('form').submit(function () {
            $('#result').text(JSON.stringify($('form').serializeObject()));
            return false;

我可以在我的html源代码中看到我的所有文本输入都有一个data-jsonid属性,但是我无法确定它在javascript / jquery中的含义。我只能在调试时找到名称和值。

我已经创建了一个jsfiddle项目来帮助解释这个问题http://jsfiddle.net/mvargos/dSz38/。如果单击“提交查询”,则会打印页面的json。我的最终目标是我希望能够读取data-jsonid属性,以便我可以格式化我的json保存方式(如果此属性存在)。 目前,json保存为

`{"1028":["Matt","Varg","27","2","Cris","Vargz","23","A"]}`

但是一旦我可以确定data-jsonid,我想创建类似于json的json:

`"1028":[{"id":"1", "tenantInfo":["Matt","Varg","27","2"]},{"id":"2", "tenantInfo":["Cris","Vargz","23","A"]}]`

我不确定我是在做错误的语法还是做出其他错误。感谢您的帮助,如果这个解释很差,请告诉我。

3 个答案:

答案 0 :(得分:2)

var a = this.serializeArray();

上面的行序列化对象..

所以基本上你是在迭代而不是jquery对象的array members

$.each(a, function ()   

$(this)在此上下文中不是合适的选择器。

答案 1 :(得分:2)

在序列化之前,您可以“记住”jQuery版本的this

$.fn.serializeObject = function() {

   var $this = $(this);

   ...

然后,当你想将它用作jQuery对象时,可以使用$ this。

   $this.data('some-data-attr');

答案 2 :(得分:1)

该上下文中的

this不是输入元素,它只是一个普通的对象。您必须导航回输入才能获取该信息:

$("[name=" + this.name + "]").data("jsonid");