脚本未被点击事件激活

hit*_*htr -1 javascript jquery

您好我在jquery中编写了一些脚本并将其绑定到click事件,但是单击事件不会激活代码.但是当我将脚本放在另一个JavaScript函数中并将该JavaScript函数绑定到单击事件监听器时,该函数能够在单击时执行.

另一件事是,当我使用JavaScript绑定脚本时,它返回警报消息的时间与我点击的div的数量相同,即如果我点击第3个div,警报消息在我的页面上显示三次dom结构是pdf.js项目,这个dom是动态创建的我想获取用户点击过的pagecontainer2的孙子的索引是我的脚本:

<script type="text/javascript">
    $(function() {
        $(".textLayer > div", "#pageContainer2").click(function () {
            var index = $(this).index();
            alert("index of div is = " + index);
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

Dom CODE:

<div id="pageContainer2" >
    <canvas id="page2" width="741" height="959"></canvas>
    <div class="textLayer">
        <div>......some text here....</div>
        <div>......some text here....</div>
        <div>......some text here....</div>
    </div>
</div>

<div id="pageContainer3" >
    <canvas id="page3" width="741" height="959"></canvas>
    <div class="textLayer">
        <div>......some text here....</div>
        <div>......some text here....</div>
        <div>......some text here....</div>
    </div>
</div>?
Run Code Online (Sandbox Code Playgroud)

Nik*_*iko 5

如果需要将单击事件处理程序分配给尚未存在但稍后将创建的DOM节点,则需要使用on并指定子节点将事件处理程序绑定到现有节点:

假设<div id="pageContainer2">已经存在,但是您正在动态地在该容器内创建这些div.所以正确的sytnax将是:

$(function() {
    $('#pageContainer2').on('click', '.textlayer > div', function() {
        /* .... */
    });
});
Run Code Online (Sandbox Code Playgroud)

这样,您实际上将事件处理程序绑定到容器,但由于大多数事件冒泡DOM,因此通过单击该容器内的任何元素触发的事件将到达容器本身.因为您指定了另一个选择器(`.textlayer> div'),然后jQuery将检查被点击的实际元素是否满足此选择器.

如果在绑定事件处理程序之后创建了#pageContainer2,您仍然可以将事件处理程序绑定到文档本身:

$(document).on('click', '#pageContainer2 .textlayer > div', function() { ...
Run Code Online (Sandbox Code Playgroud)