2011-12-11 54 views
2

我工作的事件,並使用綁定技術來獲得$(本).attr(「名」)如下不能在jQuery的

$(".floor").bind('click.index', 
{page:'floor.php',get:'floor='+$(this).attr('name')},loadContent); 

所以我在做什麼這裏是這樣的,我試圖將一個點擊事件附加到類.floor中,稍後在函數loadContent中,我根據e.data.page和e.data.get變量發出一個ajax請求。

但是當我真正執行它,網址如下: floor.php?樓=未定義

請幫我走出這個問題

+0

這jQuery的版本? –

+0

版本號1.4.0 – user1092047

回答

3

當您將數據傳遞到您的處理功能,您應該注意$(this)沒有引用該上下文中的jQuery對象。換句話說,$(this)指的是window對象(或基於上下文的除jQuery對象之外的其他任何對象),都包裝在jQuery中。因此,您應該在回調函數中使用$(this)

$(".floor").bind('click.index', {page:'floor.php'}, function(e){ 
    var name = $(this).attr('name'); 
}); 
+0

我想用我的事件命名空間,所以我可以很容易地銷燬它。綁定使用可選的數據參數。命名空間事件的鏈接http://docs.jquery.com/Namespaced_Events – user1092047

+0

查看更新。 –

+0

這個答案是錯誤的,除了最後一段。 ''click.index'是OP提到的命名空間事件,'bind'可以接受一個JavaScript對象(不是JSON,這是另一回事)作爲它的第二個參數。在傳播錯誤的信息之前,請閱讀[docs](http://api.jquery.com/bind/)。 – kapa

0

問題是$(this)正在執行當功能被綁定,而不是當該處理程序(loadContent)被調用。綁定時,this最有可能是指窗口對象。您無法在綁定時訪問事件目標。

我可能會調整你的代碼沒有自定義事件傳遞數據,並使用this時,而不是修改loadContent功能看起來像

function loadContent(e) { 
    var $target = $(e.target), 
     data; 
    if($target.hasClass('floor')) { 
     data = {page: ...}; 
    } else { 
     data = ...; 
    } 
    ... ajax shenanigans 
} 
0

要小心,總覺得是通過什麼它指。

$(".floor").bind(
    'click.index', 
    { 
     page: 'floor.php', 
     get: 'floor=' + $(this).attr('name') 
    }, 
    loadContent 
); 

在此代碼段,this將不是指你認爲它會參考(.floor jQuery對象)。現在不可能說出它所指的是什麼,取決於你的代碼圍繞這個片段。你可以閱讀約this例如on Quirksmode

你將不得不採取內部事件處理程序,其中this.floor分配的name價值的關懷。

function loadContent (e) { 
    ... 
    var getFull = e.data.get + $(this).attr('name') 
    ... 
} 

對於這個工作,你只需要改變你通過get方式:

{ 
    page: 'floor.php', 
    get: 'floor=' 
}, 

jsFiddle Demo