你好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
。
那么有人可以为我揭开这个谜团吗?
答案 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");