2013-10-24 26 views
0

我有這樣的HTML代碼:jQuery的獲取父沒有ID的孩子

<div id="main-link-1" class="menu-option"> 
    <div id="icon" class="menu-icon"></div> 
    <div class="menu-text"> Overview </div> 
    <div class="separator"></div> 
</div> 

我只是想jQuery的單擊事件添加到父。菜單選項,並獲得ID「#主鏈路1」:

$('.menu-option').click($.proxy(this.navigatorLink,this)); 

而且navigatorLink功能:

navigatorLink : function(event){ 
    if(event.preventDefault) 
     event.preventDefault(); 
    else 
     event.returnValue = false; 


    var link = event.target; 

    var linkId = $(link).attr('id'); 
} 

的鏈路ID應該是始終父ID: 「主鏈路1」

但是當我點擊孩子時,我得到了孩子的ID。當我點擊懸停的孩子時,如何才能獲得parent_id事件?

我知道它應該很容易,但我沒有找到方式,而不更改html, 在此先感謝!

+0

我認爲你正在尋找'.parent()'函數 – Joren

+0

你說的「點擊懸停」的意思是...... –

+0

好吧,這一切都歸結於什麼是在'? '...''。從它的聲音中,你在裏面使用了一個'this'。告訴我們你的實際'click'功能是什麼,我們可以幫你調試它。 *編輯*實際上,當你應該使用'this'時,聽起來你正在使用'event.target'。請參閱:http://javascript.info/tutorial/bubbling-and-capturing#this-and-event-target –

回答

1

感謝您發佈您的問題中的實際代碼。這使得它更容易回答。

當前的問題是,通過使用代理,您會失去跟蹤默認的this參數,這就是您需要用來查看正在接聽呼叫的元素。在使用event.target時,您會得到單擊的確切元素,而不是捕獲事件傳播的元素。 (對於thisevent.target之間的差異的很好的視覺例子見http://javascript.info/tutorial/bubbling-and-capturing#this-and-event-target。)

我想的問題是:你爲什麼要使用proxy?這似乎沒有必要,因爲你在功能裏面沒有使用過this。除非有更多的代碼比,我會做到以下幾點:

$('.menu-option').click(this.navigatorLink); 


navigatorLink : function(event){ 
    if(event.preventDefault) 
     event.preventDefault(); 
    else 
     event.returnValue = false; 

    var linkId = $(this).attr('id'); 
} 

如果你有一個使用this,所以你不能改變這樣的代碼,你可以保持您的舊代碼,使使用closest

navigatorLink : function(event){ 
    if(event.preventDefault) 
     event.preventDefault(); 
    else 
     event.returnValue = false; 

    var link = event.target; 

    var linkId = $(link).closest(".menu-option").attr('id'); 
} 
+1

非常感謝斯科特!這給了很多光! –

相關問題