0

嗨,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.

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

4

3 回答 3

1

.id是本机 JavaScript 方法(或通过纯 JavaScript 访问id属性的方法),并且适用于节点,例如this,而$(this)jQuery 对象是“由”本机this对象/节点制成的。因此,要检索id使用 jQuery:

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

在原生 JavaScript 中:

this.id;

两者不能互换使用(jQuery 对象在仍然是 jQuery 对象时不能与本机 DOM 一起使用,并且本机 DOM 节点/对象不能与 jQuery 方法一起使用)。

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

$(this)[0].id;
于 2012-09-14T11:24:59.413 回答
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');
        }
    });
});
于 2012-09-14T11:30:30.447 回答
0

你试过这个

$(this).attr("id");
于 2012-09-14T11:31:50.670 回答