0

我有一个<select>表单元素,我在其中创建多个<option>子元素,该元素基于循环一个 jQuery 对象数组。

我想将每个与 an 关联的 jQuery 存储<option><option>自身上,我猜是一个属性。因此,当我触发更改事件时,我可以拉出<option>基于的 jQuery 对象。

我以为我可以使用 attr 设置它,将对象序列化为 JSON,但它不起作用。有任何想法吗?

这是一些代码:

// creating the select: (data is a jquery array of objects)
    $(data).each(function() {
        var opt = $('<option></option>').val(this[id_property]).html(this[label_property]);
        // preserve the original jquery object on this <option> element:
        opt.attr('json', JSON.stringify(this));
        $(select).append(opt);
    });

// bind the onchange event, and try to recreate that original jquery object
    $(select).bind('change', function(event) {
        // this gives me a ref to the <option> element:
        var val = $(select).find(":selected");
        // now how to get the original jquery object?
        var item = $(val).attr('json');        
    });

我希望将最后一行设置 var 项设置为原始 jquery 对象 - 或者以某种方式重新创建它。我什至尝试过eval()传入项目,因为它是 JSON 格式的,但它会引发错误。

4

1 回答 1

4

您可以利用data()jQuery 中的方法,这可能会为您带来最有利的结果,并让您能够避免不必要的自定义序列化。

于 2012-11-06T22:26:45.837 回答