自定义属性返回的值未定义

时间:2013-03-26 13:54:26

标签: jquery undefined

我避免使用$(this).attr()来获取自定义元素的值,并且我已经读过,如果您需要自定义元素,则应在其前面添加data-并使用{{1访问该元素的内容(在我的例子中,它被动态填充到元素中,因为元素是一组动态元素的一部分)

我的问题很简单。

$(this).data()

我在捕获它们之后将值记录到控制台,但不出所料,<a id="' + node.Id + '" data-currentValue='+node.Name+' class="button icon-pencil with-tooltip" href="javascript:void(0);" title="Edit" onclick="UpdateAttributes($(this).data(\'currentValue\'), $(this).attr(\'id\'));"</a> 部分返回undefined(值应该在此测试用例$(this).data()中),并且id返回我期望的值返回(在我的情况下,"asdf")。

这个元素有什么问题?我无法找出出错的地方,我不知道为什么它会抛出未定义的,我需要2000046内的值。分享的任何想法和见解,以便我可以从data-currentValue获得我需要的价值?

动态元素整体:

data-currentValue

修改

所以我想到的这种方法是笨拙和繁琐的(感谢BlazeMonger确认.data()尝试将所有内容转换为原始类型,所以我改变了我的代码以使用关联数组来访问我所在的信息需要它。我不再需要元素中的自定义属性。

    $("#tblAttributes tbody").empty();
    var tableContents = [];
    $.each(data.KeyValuePairs, function (i, node) {
        tableContents[tableContents.length] = '<tr>';
        tableContents[tableContents.length] = '<td>';
        tableContents[tableContents.length] = '<p>';
        tableContents[tableContents.length] = node.Name;
        tableContents[tableContents.length] = '</p>';
        tableContents[tableContents.length] = '</td>';
        tableContents[tableContents.length] = '<td>';
        tableContents[tableContents.length] = '<span class="button-group compact">';
        tableContents[tableContents.length] = '<a id="' + node.Id + '" data-currentValue='+node.Name+' class="button icon-pencil with-tooltip" href="javascript:void(0);" title="Edit" onclick="UpdateAttributes($(this).data(\'currentValue\'), $(this).attr(\'id\'));"</a>';
        tableContents[tableContents.length] = '<a id="' + node.Id + '" class="button red-gradient icon-trash with-tooltip confirm" href="javascript:DeleteAttribute('+node.Id+');" title="Delete" </a>';
        tableContents[tableContents.length] = '</span>';
        tableContents[tableContents.length] = '</td>';
        tableContents[tableContents.length] = '</tr>';
    });
    $("#AttributeCount").html(data.KeyValuePairs.length);
    $("#tblAttributes tbody").append(tableContents.join(""));

1 个答案:

答案 0 :(得分:2)

.data()方法在页面加载时检索data- HTML属性一次。之后,您可以更改data-属性,但不会更改data()检索到的内容。

而是使用.data(name,value)设置.data(name)将检索的新值。 (另请注意,这不会同时更改data- HTML属性。您可以更改其中一个。)

jQuery可能有一些方法可以同时自动将当前data-属性拉入data()个变量,但从jQuery 1.9开始,不存在这样的内置功能。但不应该写一个。

http://api.jquery.com/data/