2

我正在尝试使用 jQuerys .data() 将一些额外的数据添加到下拉列表上的元素,下拉列表正在填充属性并且我想要的 ID 在那里,但是当我尝试访问数据时显示并且未定义。

人口代码。

 $.each(tutorArray, function(index, item){
        var TID= item.T.Id        
        $.each(item.T.TimeList, function(ind, i) {
            $(ddl).append($('<option></option>').val(i.StartTime).html(i.StartTime + ' - ' + i.EndTime).data({
                TID: TID
            }));
        });
    });  

访问代码

$(ddl).bind('change', function() {
        if($(this).val() != '') {

            var time = $(this).val(); 

            showConfirmRequestTutorCallDialogue(d, time, $(ddlDurationSelector).val(), $(this).data("TID"), $(ddlStudiesSelector).val())
        }
    });
4

5 回答 5

5

您应该data以这种方式设置元素(请参阅文档):

element.data("someKey", someValue);

因此,您的人口代码可能如下所示:

$.each(tutorArray, function(index, item){
    var TID= item.T.Id        
    $.each(item.T.TimeList, function(ind, i) {
        var element = $('<option></option>');
        element.val(i.StartTime).html(i.StartTime + ' - ' + i.EndTime);
        element.data("TID", TID);
        $(ddl).append(element);
    });
});  
于 2012-09-12T16:06:22.773 回答
1

http://api.jquery.com/data/#data-html5

我会尝试为您的数据属性名称使用驼峰式大小写,因为文档显示 html 5 在处理属性时在幕后发挥了一些作用。

于 2012-09-12T16:03:12.823 回答
1

具有上述方法的修改版本的解决方案

在你提出这个问题几个月后,我仍然想把它包括在内,这样它可以在其他用户查找类似问题时帮助他们。我最近碰巧遇到了一个类似的问题,我看到了这个线程并使用 Tadeck 的答案来设置使用 jquery 的下拉列表的数据值。

起初,数据值也没有像您提到的那样正确设置,但后来我采用了这种方法并做了一些事情(见下文),帮助我在 jquery 中设置/检索数据值。

var element = $('<option></option>');  
element.val('id').text('uiName');  
$(element).data("type", 'mytype');

// 这里唯一的变化是,我没有使用 element.data(...) 将元素称为 jquery dom 元素,而是使用 $ 以某种方式正确设置了值,我现在也可以检索数据字段!

希望这可以帮助面临类似问题的其他用户

于 2013-05-10T11:26:38.380 回答
1

无需拆分您的价值观,您可以简单地做到这一点。

var element = $(' <option data-type1="" data-type2=""></option>');

只需使用数据添加尽可能多的字段-(任何属性)

放 - $(element).data("type1", yourValues);

得到 -$("#dropdownID :selected").data("type1");

于 2015-07-09T19:41:41.017 回答
0

所以从我的研究来看,这是不可能的 .data() 需要在一个元素上而不是在子部分上。所以它不能附加到<option>元素上

我所做的是将数据包含在 value 字段中,然后在访问 value 时将其拆分。

设置代码

       var element = $('<option></option>');
       element.val(i.StartTime +"--" +TID).html(i.StartTime + ' - ' + i.EndTime);

访问代码

        var str = $(this).val();
        var substr = str.split('--');
        var time = substr[0];
        var TID = substr[1];
于 2012-09-13T09:41:14.033 回答