【问题标题】:Cant get jquery.data() or .attr() to work both return undefined无法让 jquery.data() 或 .attr() 工作都返回 undefined
【发布时间】:2016-05-23 16:23:14
【问题描述】:

我已阅读有关 .data().attr() 的其他问题,但没有一个答案对我有帮助。

我有一个带有一些按钮的表格,每个按钮都有自己的 id,格式如下: player-***** 其中***** 是一个数字ID。

我还有一些隐藏的表单元素,我正在尝试:

  • 从表单元素中读取值
  • 生成对我的 div 的引用,例如 '#draftBtn-*****'
  • 获取附加到按钮的数据。
  • 对数据做点什么......

我似乎无法将数据附加到我的 div,总是返回 undefined。

.attr('player-data').data('player) 都返回未定义。

我正在使用 jQuery v1.12.0

表格中的示例行:

<tr>
    <td><span class="label label-primary">TE</span></td>
    <td>Richard Rodgers</td>
    <td><b>GB</b> @ ARI</td>
    <td>8</td>
    <td>19</td>
    <td>5100</td>
    <td>
        <div id='draftBtn-633397' class='btn btn-sm btn-success draft-player' data-player='{
            "id" : 633397,
            "player" : 16491,
            "shortName" : "R.Rodgers",
            "name" : "Richard Rodgers",
            "team" : "GB",
            "opponent" : "ARI",
            "position" : "TE",
            "salary" : 5100,
            "lastGameFantasyPoints" : "5",
            "projectedFantasyPoints" : "3",
            "opponentRank" : "8",
            "opponentPositionRank" : "19",
            "status" : "Scrambled",
            "statusCode" : "P",
            "statusColor" : "green"
        }'>+</div>
    </td>
</tr>

我的javascript:

var squadPlayers = {
    'qb': null,
    'rb1': null,
    'rb2': null,
    'wr1': null,
    'wr2': null,
    'te': null,
    'k': null,
    'flex': null,
    'def': null
};

var getPosKeys = function(){
    var keys = [];
    for (var key in squadPlayers) {
        if (squadPlayers.hasOwnProperty(key)) {
            keys.push(key);
        }
    }
    return keys;
}

var initSquad = function(){
    var keys = getPosKeys();
    console.log(keys);    
    keys.forEach(function(element) {
        var formRef = '#contestEntry_' + element;
        console.log(formRef);
        var playerID = $(formRef).val();
        console.log({'playerID': playerID}); // 633397
        var btnRef = '#draftBtn-'+playerID;
        console.log({'btnRef' : btnRef }); // '#draftBtn-633397'
        var playerAttr = $(btnRef).attr('data-player');
        console.log(playerAttr); // undefined
        var playerData = $(btnRef).data('player');
        console.log(playerData); // undefined

       //do something with the data.....        
       //addPlayerToSquad($)
    }, this);
}

【问题讨论】:

  • 使用 dataset 原生属性。在这种情况下将是$(selector).get(0).dataset.player
  • 不应该 .attr('player-data') 是 .attr('data-player') 吗?
  • @peinearydevelopment 是的,在更下方的实际代码中是
  • 你也可以登录$(btnRef).length - 确保它实际上首先找到了元素?您确定该元素存在并在此代码运行时填充?
  • Your code works。鉴于playerID 确实是633397,并且当代码执行时,您粘贴的HTML 在DOM 中可用,attrdata 都不会产生未定义的结果。因此,无论是什么导致您的代码记录未定义,它是您粘贴的代码之外的东西,或者没有满足上述先决条件(表是否由 AJAX 调用填充,并且您没有使用回调?)

标签: javascript jquery html attr


【解决方案1】:

FROM COMMENTS(将按钮用作事件):

所以我现在使用按钮作为事件的触发器,而不是从表格行中,一个简单的测试将显示一切正常:

$(function() {

  $(".btn").click(function() {
      var tr = $(this).closest("tr").find("td:last div"),
        json = tr.data("player");

     alert('ID: ' + json.id + '\nTeam: ' + json.team);
 });

});

实时示例:http://jsbin.com/kojunibixa/1/edit?html,js,output

P.S. 我还是不明白把容易做的事情复杂化的想法......对不起。

【讨论】:

  • 我需要能够在我附加到按钮单击的函数上使用 $(this),因此将数据附加到 对我没有多大帮助。 (投反对票的不是我)
  • 关于在何处放置数据属性的意见并不能回答问题。对于 确实 回答问题的答案,它会稍微没问题,但你的答案的其余部分本质上是一个评论,说“你的代码没问题”,其中已经有很多问题了。如果您想回答“您的代码有效”,您应该投票以关闭主题,“为什么此代码无效”。
  • @DizzyBryanHigh 我还是不明白,但我已经更新了要与每行上的按钮一起使用的代码...
猜你喜欢
相关资源
最近更新 更多
热门标签