2012-09-14 54 views
0

嗨JS和jQuery的巨型大師!我對「click」函數的技巧有點困惑,並認爲問題的解釋是在於jQuery和JS的錯綜複雜。jQuery的來電顯示以奇怪的方式工作

我有一個標準綁定到click事件

$('.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

確實unundefined意味着界定? – PaperThick

回答

1

.id是天然JavaScript方法(或訪問通過普通的JavaScript的id屬性的裝置),以及工作在節點上,例如this,而$(this)是天然this對象/節點「從由」一個jQuery對象。在本地JavaScript

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

:那麼,檢索id使用jQuery

this.id; 

兩者不能互換使用(jQuery對象不會與本地DOM,同時仍然一個jQuery工作對象,並且本機DOM節點/對象不能使用jQuery方法)。

爲了取回一個jQuery對象的DOM節點和檢索id

$(this)[0].id; 
+0

謝謝師父! )))現在我明白這是一個蹩腳的問題! –

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'); 
     } 
    }); 
}); 
0

您是否嘗試過這個

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