2014-10-31 64 views
0

我已经创建了一个应该是联系人列表的div元素。它应该包含其他div。 我想要做的是在每个列表项目(每个内部div)上附加一个点击处理程序。 但点击处理程序永远不会被触发。 jquery没有检测到点击子元素

$(".contact").on("click", function() { 
 
    alert("clicked"); 
 
});
.contacts { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 300px; 
 
    width: 100px; 
 
    height: 250px; 
 
    border-color: black; 
 
    border-style: solid; 
 
    z-index: 1; 
 
    overflow: scroll; 
 
} 
 
.contact { 
 
    position: relative; 
 
    width: 80%; 
 
    height: 20%; 
 
    border-style: solid; 
 
    border-color: red; 
 
    z-index: 100; 
 
}
<div id="contactList" class="contacts"> 
 
    <div id="1" class="contact">one</div> 
 
    <div id="2" class="contact">two</div> 
 
    <div id="3" class="contact">three</div> 
 
</div>

如果我附上父DOM对象一个单击处理程序,它就会被触发。我在这里错过了什么吗?

编辑:

我傻的,我忘了提,孩子们以这种方式添加:

$(".contacts").append($("<div id='"+id+"' class=contact >"+d[contact].name+"</div>")); 

其中,“d”和“ID”的变量来自于成功的服务器调用。

+1

这是你的样品http://jsfiddle.net/a6ze1cyo/,它是精细运行,请问是什么问题? – 2014-10-31 19:51:15

+0

所以如果你改变选择器到'$(“。contacts”)。'它有效吗? – dfsq 2014-10-31 19:51:24

+0

@paris你有没有得到任何JS错误? – 2014-10-31 19:52:17

回答

2

$(".contact").on("click",function(){ 

代替

$(".contacts").on("click",function(){ 

你有这样的文件中触发加载事件? 它不会工作,否则

$(function(){ 
    $(".contact").on("click",function(){ 
     alert("clicked"); 
    }); 
}); 

编辑:

由于OP忘了提一些关键的,这里是我的答案。

没有'围绕类名。这应该工作:

$(".contacts").append($("<div id='"+id+"' class='contact' >"+d[contact].name+"</div>")); 

编辑2

您也可以使用children()方法:

$(function(){ 
    $(".contacts").children("div").on("click",function(){ 
     alert("clicked"); 
    }); 
}); 
1

稍微好一点的把这个事件上的方式是在文档准备功能使用.click jquery函数结合页面加载。这是.on(“click”,FUNCTION)的简写。

例子:

$(document).ready(function(){ 
    $(".contact").click(function(){ 
     alert("clicked"); 
    }); 
}); 
+0

这是如何更好? http://stackoverflow.com/questions/9122078/difference-between-onclick-vs-click – 2014-11-01 19:33:36

+0

以便您的事件处理程序不在全局空间中。而且,因为在jQuery代码中点击最有可能的调用,我宁愿输入对其他人更易读的短手版本。链接说话的内存,但如果你担心使用.click的内存多余的字节,那么你的应用程序可能有其他问题。 – 2014-11-03 16:03:56

+0

没有在链接的讨论中重复参数,我眼中最大的优势是:'与上面的[.on()],一个匹配您的选择器的所有元素的处理程序,包括动态创建的' – 2014-11-04 14:23:26