簡體   English   中英

如何在頁面加載后創建的div中添加偵聽器?

[英]How to add a listener to a div that is created after page load?

我在這里查找了其他類似的問題,看起來使用on()進行事件委派在某種程度上符合我的需要。

我有一個錨點,用戶單擊該錨點即可生成下拉菜單。 通過CSS的菜單顯示在鏈接下方,但是在DOM中,下拉列表的新div是在錨所在的div的“范圍”之外生成的。 所以是這樣的:

選擇之前:

<body>
    <div>
        <!-- load of other nested divs -->
        <div class="menu">
            <a href="#" id="clickAnchor">Select from this list</a>
        </div>
    </div>
</body>

選擇后:

<body>
    <div>
        <!-- load of other nested divs -->
        <div class="menu">
            <a href="#" id="clickAnchor">Select from this list</a>
        </div>
    </div>
    <div class="selected">
        <ul>
            <li>...</li>
            <!-- lots of these -->
        </ul>
</body>

我使用<!-- load of other nested divs -->表示“菜單”嵌套在第一個主體div的深處。

我想做的是,當“選定”出現時,我想給它添加另一個類。 這樣一來,我可以在其他地方重復使用下拉菜單。 但是由於兩個或兩個原因之一,我無法訪問此類:

1]它是動態添加的,因此我向頁面添加類的jquery已在頁面加載時完成運行。 我無法使用$(".selected").on("click", function(event){}因為我沒有單擊“ selected”,而是單擊了“ clickAnchor”,所以我不確定如何訪問“這樣選擇。

2]從上面開始,當我嘗試$("#clickAnchor").on("click", function(event){}也沒有發生任何事情-這是因為新的div被創建為<body>的直接子代<body> ,而不是'menu'的子級;換句話說,這與click事件的范圍有關嗎(可能在這里完全錯誤)。

如果無法控制添加div,請嘗試制作一個樣機。

$("#clickAnchor").on("click", function() {
    // code to append the div
    setTimeout(function() {
        var div = $(".selected");
        // add your code to add the class
    }, 0);
});

如果將超時設置為0ms,則在DOM趕上插入div后,它將被排隊等待執行,因此您應該可以選擇它。 另外,您能否對select2.js腳本的執行作出承諾? 那么您將不需要超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM