2012-07-13 96 views
1

一個非常不吸引人的標題,但我不確定其他人如何解釋它。可點擊的div標籤使用not()該div內的任何div標籤

我有下面的代碼,這是我的導航欄。每個「組」都是一個基本上是一個下拉選項。如果您想直觀地查看此,你可以在www.titaniumwebdesigns.com

<nav> 
    <ul> 
    <div id="line"><img src="/images/nav/line.png" alt="" /></div> 
    <li> 
     <div class="group"> 
     <div class="outside"><div class="sub a media"></div></div> 
     <div class="inside"><div class="sub b gallery"></div></div> 
     <div class="circle selected"><div class="sub c showcase"></div></div> 
     </div> 
     <div class="text portfolio"></div> 
    </li> 
    <li> 
     <div class="group"> 
     <div class="outside"><div class="sub a everything-else"></div></div> 
     <div class="inside"><div class="sub b development"></div></div> 
     <div class="circle"><div class="sub c design"></div></div> 
     </div> 
     <div class="text services"></div> 
    </li> 
    <li> 
     <div class="group"> 
     <div class="outside"><div class="sub a the-company"></div></div> 
     <div class="inside"><div class="sub b the-director"></div></div> 
     <div class="circle"><div class="sub c employees"></div></div> 
     </div> 
     <div class="text about"></div> 
    </li> 
    <li> 
     <div class="group"> 
     <div class="outside"><div class="sub a arrange-a-meeting"></div></div> 
     <div class="inside"><div class="sub b get-in-touch"></div></div> 
     <div class="circle"><div class="sub c support"></div></div> 
     </div> 
     <div class="text contact"></div> 
    </li> 
    <li> 
     <div class="group"> 
     <div class="outside"><div class="sub a facebook"></div></div> 
     <div class="inside"><div class="sub b twitter"></div></div> 
     <div class="circle"><div class="sub c blog"></div></div> 
     </div> 
     <div class="text social"></div> 
    </li> 
    </ul> 
    <div class="clear"></div> 
</nav> 

查看它,我想用戶點擊任一.outside,.inside或.circle併爲它找出哪些index()它必須找到它的鏈接,然後將重定向或滑動使用一些不錯的jQuery效果。這裏有一個例子:

var _0 = "portfolio.php"; 
var _1 = "showcase.php"; //etc... 

//below within $(document).ready() { 
$(".group div").not(".sub").click(function() { 
    alert($(this).index()); //or find the appropriate page using the variables above 
}); 

然而,它只是沒有按照預期的方式工作。我知道.sub是在選定的div內,但是有沒有辦法忽略這些,即使它們在div標籤內?我想點擊.outside,.inside,.circle和一些事情發生,但同時,我想單擊.sub並且什麼都不會發生,即使它們在其他div中。 CSS要求它們在div標籤內,但在視覺上,它們使用CSS從div標籤中移除,所以你不會在同一個地方點擊。

+0

你確實意識到,通過鍵盤導航的用戶完全無法訪問。如果你打算使用'div'而不是'a',至少要添加'tabindex = 0',這樣div就可以通過鍵盤進行聚焦,並添加一些視覺上隱藏的文本,以便他們知道他們正在激活什麼。 – steveax 2012-07-14 00:52:18

+0

感謝您的評論,我明白,這不是鍵盤友好的目前,但我會確保所有的輔助功能選項將被添加,一旦主選項正常工作。當我開始做這件事時,我會記住標籤索引的事情!謝謝! – 2012-07-14 01:25:31

回答

1

只是不要爲class sub做任何事情。就像這樣:

//below within $(document).ready() { 
$(".group div:odd").click(function(e) { 
    if ($(this).hasClass("sub")) 
    { 
    e.stopPropagation(); 
    return; 
    } 
    alert($(this).index()); //or find the appropriate page using the variables above 
}); 
+0

這段代碼看起來不錯,但是alert()根本沒有彈出。 if語句中的警報效果很好,但之後的任何內容似乎都不起作用,可能是因爲它仍在檢測其他div標記中的.sub。 – 2012-07-14 00:16:11

+0

我不確定,我無法讓你的代碼在jsFiddle上測試。 – Hogan 2012-07-14 00:28:41

+0

你想讓我用完整的代碼做一個jsFiddle鏈接嗎?目前這個網站是titaniumwebdesigns.com – 2012-07-14 01:24:56

1

你應該使用更具體的選擇:

$(".group").children('div').click(...) 

$(".group > div").click(...) 

這將使只.inner,.outer和.circle點擊。

+0

雖然這看起來像是最好的解決方案,但我在一開始就嘗試了這兩種方法,但都無法正常工作。 – 2012-07-14 00:17:21