2012-10-01 60 views
0

如果我運行下面的代碼,我得到,因爲預期,1,因爲a元素是在div元素內。一個元素點擊和文檔點擊層次結構

HTML:

<div class=".holder"> 
    <a href="#" class=".link">a</a> 
</div> 

的jQuery:

$(document).click(function (e) { 
    alert($(e.target).closest(".holder").length); 
}); 

現在,一個元素中需要重新填充的div元素,包括一個元素本身,所以:

$(".link").on("click", function (e) { 
    e.preventDefault(); 
    $(".holder").html("some html"); 
}); 

問題是:因爲文檔點擊發生在a元素點擊(有意義,層次結構)之後,如果我點擊ae lement,我得到0而不是1,因爲一個父元素不再存在,而a元素本身只存在於內存中。

有沒有辦法解決這個問題,而不檢查一個元素點擊自己?

+0

究竟是什麼你想實現什麼?你只需要$(e.target).closest(「。holder」).length'來提醒1? –

+0

究竟是什麼問題? –

回答

1

你可以推遲更換HTML:

$(document).click(function (e) { 
    alert($(e.target).closest(".holder").length); 
    if($('.holder').data('executeMe')) 
    $('.holder').data('executeMe')(); 
}); 

$(".link").on("click", function (e) { 
    e.preventDefault(); 
    $('.holder').data('executeMe', function() { 
     $(".holder").html("some html"); 
    }); 
}); 

2

你可以試試這個方法

$(document).click(function (e) { 
    if(e.target.className === 'link'){ 
     e.preventDefault(); 
     alert($(e.target).closest(".holder").length); 
     $(".holder").html("some html"); 
    } 
}); 

可以爲文檔創建點擊事件,並檢查當前有哪些目標是..如果它的鏈接,然後寫出代碼來處理你想要的東西..

也刪除點。在你的類名類= 「鏈接」

CHECK DEMO