jQuery调用者ID以奇怪的方式工作

时间:2012-09-14 11:22:05

标签: javascript jquery

你好JS和jQuery的大师!我对“点击”功能的技巧感到有些困惑,并认为问题的解释在于jQuery和JS的复杂性。

我对点击事件有标准绑定

$('.add-button').click( function(event) {
  $.ajax({
    url: 'superentities/new',
    headers: {
      'X-Transaction': 'GET new superentities',
      'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
    },
    data: {
      entity: event.target.id
    }
  });
});

我将呼叫者的ID发送到控制器。但在此之前,我在我的数据哈希中调用$(this).id来代替event.target.id$(this).id始终未定义,尽管Firebug的观察者就像this->id == some_unundefined_value

那么有人可以为我揭开这个谜团吗?

3 个答案:

答案 0 :(得分:1)

.id是一种原生JavaScript方法(或通过纯JavaScript访问id属性的方法),并且在节点上工作,例如this,而$(this)是一个jQuery对象'由'本地this对象/节点组成。所以,使用jQuery检索id

$(this).attr('id');

在原生JavaScript中:

this.id;

这两个不能互换使用(jQuery对象不能与原生DOM一起使用,而jQuery对象,本机DOM节点/对象不能与jQuery方法一起使用)。

从jQuery对象检索DOM节点并检索id

$(this)[0].id;

答案 1 :(得分:0)

这个怎么样?我认为你有一个范围问题。 $(this)不是指$('。add-button'),而是指示例中的$ .ajax。

$('.add-button').click( function(event) {
    var id = $(this).attr('id');
    $.ajax({
        data: {
            entity: id
        }
    });
});

或者你可以这样做:

$('.add-button').click( function(event) {
    var self = this; 
    $.ajax({
        data: {
            entity: self.attr('id');
        }
    });
});

答案 2 :(得分:0)

你试过这个吗?

$(this).attr("id");