1

我正在尝试从 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:

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

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

4

3 回答 3

2
var a = this.serializeArray();

上面的行序列化了对象..

所以基本上你正在迭代array members那些不是 jquery 对象

$.each(a, function ()   

$(this)在这种情况下不是合适的选择器。

于 2013-01-07T22:24:24.907 回答
2

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

$.fn.serializeObject = function() {

   var $this = $(this);

   ...

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

   $this.data('some-data-attr');
于 2013-01-07T22:30:20.947 回答
1

this在那种情况下不是输入元素,它只是一个普通的对象。您必须导航回输入以获取该信息:

$("[name=" + this.name + "]").data("jsonid");
于 2013-01-07T22:24:33.620 回答