javascript - 事件处理程序错误 : "this.data() is not a function"

标签 javascript jquery

我有一个 HTML 链接列表,每个链接都有 data-... 属性:

<ul id="list">
    <li><a data-info="link1"> **** </a></li>
    <li><a data-info="link2">****</a></li>
    <li><a data-info="link3">**** </a></li>
    <li><a data-info="link4">****</a> </li>
</ul>

我需要在点击链接时接收链接的 data-info 值。所以我想到了这样的事情:

var my_links = $('#list').find('a');

my_links.on('click', function(){
     console.log(this.data(info));
});

但后来我得到:

Uncaught TypeError: this.data is not a function

如果我这样做:

var my_links = $('#list').find('a');

my_links.on('click', function(){
  console.log(this);
});

我得到每个链接的完整HTML代码,例如:

<a data-info="link1"> **** </a>

为什么会发生这两种情况,我该如何解决?

最佳答案

data()是一个 jQuery 方法,不是原生 DOM 对象的方法。

this将是 <a>被点击的元素⟩——原生 DOM 对象 ( HTMLAnchorElement )。给它一个 jQuery 包装器来调用 jQuery 方法:

my_links.on('click', function() {
  console.log( $(this).data('info') );
});

或者,您可以跳过 jQuery 包装器并直接访问数据属性:

my_links.on('click', function() {
  console.log( this.dataset.info );
});

const my_links = $('#list a');

my_links.on('click', function() {
  console.log( 'jQuery: ' + $(this).data('info') );
  console.log( 'Vanilla JS: ' + this.dataset.info );
});
a {
  cursor: pointer;
  border-bottom: 1px solid blue;
}

li {
  line-height: 2em;
}
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul id="list">
    <li><a data-info="link1">link 1</a></li>
    <li><a data-info="link2">link 2</a></li>
    <li><a data-info="link3">link 3</a></li>
    <li><a data-info="link4">link 4</a> </li>
</ul>

关于javascript - 事件处理程序错误 : "this.data() is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32212029/

相关文章:

JavaScript 作用域 - 在循环中获取 onClick 对象的正确实例

javascript - 设置剩余24小时倒计时

javascript - JQueryUI 垂直选项卡 - 添加一些(显然不相关的)CSS 样式后,用于选项卡功能的 JS 停止工作

带有对 .cshtml 函数调用的 Javascript 变量

javascript - 在 React 中使用 fullcalendar v4 导入 rrule 插件

javascript - 使用 jQuery 将选择框添加到 html

Javascript - 将字符串作为文本/html复制到剪贴板

javascript - 解决 Protractor Promise 后退出函数

javascript - typescript - 检测 div 是否溢出文本

javascript - 如何根据数据表中的另一个单元格值隐藏单元格值