2016-04-21 36 views
1

我已經嘗試了我在Stack Overflow上找到的所有內容,但是我無法使其工作。這是我的代碼。從事件觸發器獲取ID

$(document).ready(function(){ 
 
    
 
    $(".category, .submenu").mouseenter(function(){ 
 
    
 
    var i = 0; 
 
    var id = "#category1" /*-- $(obj).attr("id"); */ 
 
    if (id == "#category1") {i = 1}; 
 
    
 
    $("#submenu" + i).toggleClass("submenuHover"); 
 
    $("#category" + i).toggleClass("categoryHover"); 
 
    }); 
 
    
 
    $("#category1, #submenu1").mouseleave(function(){ 
 
    $("#submenu1").toggleClass("submenuHover") 
 
    $("#category1").toggleClass("categoryHover"); 
 
    }); 
 
    
 
    $("#category2, #submenu2").mouseenter(function(){ 
 
    $("#submenu2").toggleClass("submenuHover"); 
 
    $("#category2").toggleClass("categoryHover"); 
 
    }); 
 
    
 
    $("#category2, #submenu2").mouseleave(function(){ 
 
    $("#submenu2").toggleClass("submenuHover"); 
 
    $("#category2").toggleClass("categoryHover"); 
 
    }); 
 
    
 
});
<a id="category1" class="category" href="#">Category 1</a> 
 
<div id="submenu1" class="submenu"> 
 

 
    <div> 
 
    <b>Column 1</b> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li><a href="#">Item 2</a></li> 
 
     <li><a href="#">Item 3</a></li> 
 
     <li><a href="#">Item 4</a></li> 
 
     <li><a href="#">Item 5</a></li> 
 
    </ul> 
 
    </div> 
 
    
 
    <div> 
 
    <b>Column 2</b> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li><a href="#">Item 2</a></li> 
 
     <li><a href="#">Item 3</a></li> 
 
     <li><a href="#">Item 4</a></li> 
 
     <li><a href="#">Item 5</a></li> 
 
    </ul> 
 
    </div> 
 
    
 
</div> 
 

 
<a id="category2" class="category" href="#">Category 2</a> 
 
<div id="submenu2" class="submenu">Submenu #2 
 
    <div> 
 
    <b>Column 1</b> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li><a href="#">Item 2</a></li> 
 
     <li><a href="#">Item 3</a></li> 
 
     <li><a href="#">Item 4</a></li> 
 
     <li><a href="#">Item 5</a></li> 
 
    </ul> 
 
    </div> 
 
    
 
    <div> 
 
    <b>Column 2</b> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li><a href="#">Item 2</a></li> 
 
     <li><a href="#">Item 3</a></li> 
 
     <li><a href="#">Item 4</a></li> 
 
     <li><a href="#">Item 5</a></li> 
 
    </ul> 
 
    
 
    </div> 
 

 
</div>

線> VAR ID = 「#類別1」/ * - $(OBJ).attr( 「ID」); */

是我的問題所在。

我已評論$(obj).attr(「id」);並添加了「#category1」。 它的工作原理是這樣的。 我如何獲得id,以便將此代碼壓縮成一個區塊? 此外,這仍然是一項工作,所以一旦我找出這一步,我想結合mouseenter和mouseleave使用相同的值我,我不知道如何繼續那部分。

+0

在事件處理程序中使用'this'或'$(this)'。 **答案:**使用'this.id'或'$(this).attr('id')' – Tushar

+0

是的,我試過了,它不起作用。這是我執行它的方式嗎?這是我的代碼行。 var id = $(this).attr(「id」);這是我的第一個JavaScript程序,所以也許我不瞭解我的代碼結構的基本知識。 – Matt

+0

@Matt你確定你「正確地嘗試了」嗎?看我的答案中的小提琴;我得到了它的工作。 – 8protons

回答

1

從觸發事件的類獲得ID:

$(".category, .submenu").mouseenter(function(){ 
    var id = $(this).attr('id'); 
    ... 
} 

下一次做出的jsfiddle但這裏有一個我爲你做的,可見它的工作原理。

https://jsfiddle.net/3yn4e0ng/

看在控制檯證明它是讓你的ID。


最後,你將有問題你比較語句像這樣:

if (id == "#category1") {i = 1}; 

因爲jQuery不返回(#)符號。您明確要求id,所以沒有理由讓jQuery將#符號傳回字符串,表明thisid

考慮這個:

if (id == "category1") {i = 1}; 

注:有你超過===使用==,除非你沒有安全感有關jQuery的獲取ID是否爲字符串類型的任何理由。閱讀這個驚人的帖子:Which equals operator (== vs ===) should be used in JavaScript comparisons?

+1

這是導致問題的(#)。謝謝! – Matt

+0

@Matt很高興我們明白了!保重。 – 8protons

0

,你可以做這樣的:

var id = $(this).hasClass("category") ? $(this).attr("id") : $(this).closest(".submenu").prev("a").attr("id");