事件委托和jQuery load()

时间:2014-03-31 20:43:00

标签: javascript jquery

我试图将事件附加到导航栏中动态加载的导航项目。单击加载的导航项时,它将执行某些操作(警报" hello world")。我非常肯定这里的答案与事件授权有关,但我已经尝试了很多东西,而且尚未确切地想出它。

要加载myNav:

   <div id='myNav'>
        <ul>
            <li id='navItem1'>1</li>
            <li id='navItem2'>2</li>
            <li id='navItem3'>3</li>
            <li id='navItem4'>4</li>
        </ul>
    </div>

加载到navBar:

<div id='navBar'>
</div>

这是运行它的js:

var loadURL = "index.html #myNav";
$("#navBar").load(loadURL).slideDown("medium");

现在将事件附加到新加载的导航项目(这是我错误的部分):

$('#navItem1').on("click", function(){ 
   alert("hello world!");
});

1 个答案:

答案 0 :(得分:4)

您必须使用on()的委托版本,并委托给非动态插入的元素,在本例中为#navBar

$("#navBar").on("click", "#navItem1", function(){ 
   alert("hello world!");
});

或load()中提供的回调,以在元素实际加载时附加事件处理程序

$("#navBar").load(loadURL, function() {
    $('#navItem1').on("click", function(){ 
        alert("hello world!");
    });
}).slideDown("medium");