2009-06-19 19 views
1

我有兩個DIV,第一個在其中包含第二個DIV的HREF屬性(complete setup on jsbin)中的鏈接。jQuery事件委託與非平凡的HTML標記?

我想動畫第二個DIV時,用戶點擊第一個 - 第一個任何地方。我也想使用事件委派,因爲我會在頁面上有很多這樣的「DIV夫婦」(我使用的是這個SO answer的JS片段)。

如果用戶點擊DIV本身,它將工作 - 只需檢查螢火蟲控制檯輸出。問題是,如果用戶點擊其中一個SPAN或鏈接本身,則不再有效。

我該如何概括點擊處理程序來管理點擊我的DIV內的任何東西?

這裏的JS:

$('#a').click(function(e) { 
    var n = $(e.target)[0]; 
    console.log(n); 

    if (n && (n.nodeName.toUpperCase() == 'DIV')) { 
     var id = $(n).find('a').attr('hash'); 

     console.log(id); 
     $(id).slideToggle(); 
    } 
    return false; 
}); 

回答

0

我花了這麼久才寫上去,我決定無論如何要張貼的問題,也許有人提出了一種更好的方式。

這是我找到了解決辦法(jsbin sandbox):

$('#a').click(function(e) { 
    var n = $(e.target)[0]; 

    var name = n.nodeName.toLowerCase() + '.' + n.className.toLowerCase(); 

    if (n && (name === "div.clicker" || $(n).parents("div.clicker").length)) { 
     var id = $(n).find('a').attr('hash'); 
     if(!id) { 
      id = $(n).parents("div.clicker").find('a').attr('hash'); 
     } 
     console.log(id); 
    } 
    return false; 
}); 
0

這裏是我的解決方案。不知道這是否正是你想要的,但它適用於我。

$(document).ready(function() { 
    $('#a').click(function() { 
     var a = $("a", this); 
     $(a[0].hash).slideToggle(); 
    }); 
}); 

編輯:在這兩個IE7和FX3


編輯測試:在這種情況下...

$(function() { 
    $("a.tab").click(function() { 
     $($(this).attr("hash")).slideToggle(); 
     return false; 
    }); 
}); 

類似的東西可能工作(把標籤類的任何事情有一個div「附加」它)。但是,除非我真的看到它的一個例子,否則我不確定。但如果你希望它的翼展點擊時工作......你會類連接到跨度,而是做:

$(function() { 
    $("span.tab").click(function() { 
     var a = $("a",this); 
     $(a.attr("hash")).slideToggle(); 
    }); 
}); 

不知道,如果你想要一個開放的div關閉,如果另外一個被打開。如果這不能解決你的問題,這將有助於如果你將在jsbin上舉一個例子...

+0

這絕對看起來更簡單! – montrealist 2009-06-19 20:04:48