Javascript变量 - 未定义

时间:2013-01-06 04:51:28

标签: php javascript jquery

为什么当我点击表格行时,是否会将该行数据属性警告为“未定义”?

$(document).on('click', 'tr', function() {

    alert($(this).data("recordId"))

});

这是PHP(成功)将fee_source_id的变量作为数据属性传递到表行中的

<table = "all_aifs">
<tr>
    <th><b>Invoice ID</b></th>
    <th><b>Company Name</b></th>
    <th><b>Invoice Date</b></th>
    <th><b>Link</b></th>
</tr>
<?php foreach($result as $index => $row) : ?>
<tr data-recordId="<?=$row[id];?>"
    class="<?=$row["match"] ? "match" : "";?>">
    <td><?php echo $row[id]; ?></td>
    <td><?php echo $row[company_name]; ?></td>
    <td><?php echo $row[invoice_date]; ?></td>
    <td></td>
</tr>

更新 感谢下面的评论,我发现上面的JavaScript代码中存在一些错误,如下所示:

  1. 警报方法正在调用data元素而不是attr元素。
  2. attr方法的参数已更改为("data-recordId")。 (注意:jQuery知道要忽略此参数的第一部分,因此,data-未包含在参数中。)
  3. 警告方法
  4. 末尾有一个缺少的分号

    更新了jQuery(现在可以使用)

    $(document).on('click', 'tr', function() {
    
        alert($(this).attr("data-recordID"));
    
    });
    

    问题

    • 我正在使用支持$.on()的jQuery 1.7.2,并且还应该支持.data()所以,如果我使用.data()方法的原始positng仍然有效吗?为什么不起作用?
    • 不是将data-attribute设置为“x”,因为它完全等于表中每行的第一列,(fee_source_id)我可以只使用每个中的第一列/单元格表的行而不是已传递的data-attribute,以引用该记录?

1 个答案:

答案 0 :(得分:0)

  

我正在使用支持$.on()的jQuery 1.7.2,并且还应支持.data(),所以,如果我使用.data()方法的原始positng仍然有效吗?为什么不起作用?

如果您使用.datayou're actually reading from jQuery's data object访问数据属性,恰好将cameCased键映射到带连字符的键(recordId -> record-id)。这意味着如果您将属性重命名为data-record-id,则可以使用.data('record-id').data('recordId')获取该属性。 See a demontration

  

不是将data-attribute设置为“x”,因为它完全等于表中每行的第一列,(fee_source_id)我可以只使用每个中的第一列/单元格表的行而不是已传递的data-attribute,以引用该记录?

是的,你可以这样做(例子包括在同一个demo中):

$(document).on('click', 'tr', function() {
    var record_id = $(this).find('td:first-child').text();
    alert(record_id);
});