2015-08-21 22 views
0

我在jQuery数据函数中遇到了一些麻烦。jquery data()不起作用

$(e.target).data(“unitId”)未定义。

我一直在尝试解决这一段时间,但无法找到我的代码有什么问题。

有没有人看到这里有什么问题?

var SomeView = Backbone.View.extend({ 
    el: '#sidebar', 
    events: { 
     "click .link-unit": "route" 
    }, 
    initialize: function(){ 

     this.render(); 

    }, 
    render: function(){ 
     this.$el.html('<div class="link-unit" data-unitId="some data">some text</div>'); 
    }, 
    route: function(e){ 
     console.log($(e.target).data('unitId')); 
    }, 
}); 
+1

? – Alex

+0

你能提供相关的标记吗? – PeterKA

回答

4

当你请求.data("dataId")与驼峰,jQuery的是转成属性"data-data-id"的请求。

您可以通过不使用camelcase来修复它。例如,如果在HTML和jQuery中都使用全部小写字母来表示属性名称,那么它就可以正常工作。或者,您可以更改HTML以使用"data-data-id"作为属性名称,并将camelcase保留在HTML中。

这个解释从the jQuery doc

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>

$("div").data("lastValue") === 43;

该...上面的代码正确地是指该元素的 data-last-value属性。如果 与传递的键没有存储数据,则jQuery在 元素的属性中进行搜索,将驼峰字符串转换为虚线字符串,然后将数据前置到结果中。所以,字符串lastValue将 转换为data-last-value

工作演示:当你叫`$(e.target)。数据( “单元ID”)`http://jsfiddle.net/jfriend00/uaoL0hdn/

0

而是尝试:

$(e.target).data("unitid") 

总是尝试全部使用小写在你的标记和代码,这样你就不会遇到这样的问题。

例如,假设下面的HTML:

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div> 

以下jQuery代码将工作的全部。

$("div").data("role") === "page"; 
$("div").data("lastValue") === 43; 
$("div").data("hidden") === true; 
$("div").data("options").name === "John"; 

代码的第二个语句上述正确地是指该元素的 data-last-value属性。如果 与传递的键没有存储数据,则jQuery搜索 元素的属性,将驼峰字符串转换为虚线字符串,然后将数据前置到结果。所以,字符串lastValue被转换为 为data-last-value

编号:https://api.jquery.com/data/

+0

'数据'是区分大小写的 – Alex

+0

谢谢,它确实有效。 我很惊讶,因为在他们给出的例子中包含大写的JQuery数据()文档 –