无法在Object Literal

时间:2015-11-22 15:43:13

标签: javascript jquery html design-patterns object-literal

我正在尝试学习对象文字模式在Javascript中的工作原理。 在我的一个项目中,我被困在一个使用jQuery函数的部分。 为了解决这个问题,我构建了一个小例子。

我希望有人能给我提供一些很棒的提示。

Javascript:创建一个对象文字,并调用init()方法。

HTML:某些部分带有删除按钮。单击时,我想显示一个警报,其中关联的id从DOM中提取为data-attribute。但是有一部分它失败了,javascript不知道.data在那个特定的功能中意味着什么。

谢谢......!

var test = {
  init: function() {
    this.dom();
    this.events();
  },
  dom: function() {
    this.$contentbox = $('.box');
    this.$buttons = this.$contentbox.find('a');
  },
  events: function() {
    this.$buttons.on('click', this.removeDiv);
  },
  removeDiv: function(event) {
    event.preventDefault();
    var div = this.closest('.removeMe'); // This works perfectly
    var divID = div.data('id'); // Crashing -> Uncaught TypeError: div.data is not a function
    alert('Product ' + divID + ' is to be deleted...');
  }
}

test.init();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="box">
  <div class="content">
    Hi there! Click X to delete item :)
  </div>
  <div data-id="6" class="removeMe">
    Product 6 <a href="#">(X)</a>
  </div>
  <div data-id="7" class="removeMe">
    Product 7 <a href="#">(X)</a>
  </div>
  <div data-id="8" class="removeMe">
    Product 8 <a href="#">(X)</a>
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

div是一个vanilla HTMLDivElment而不是jQuery对象,因此没有.data()方法,而是:

var divID = $(div).data('id')