87,923
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
var clone;
$(function() {
$('dl dd').click(function() {
$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
clone = $(this).clone(true);
});
/*$('.close').live('click', function() {
$(this).parent().html('Add a phone number');
});*/
$('dl dd').delegate('.close', 'click', function(e) {
//$(this).parent().html('Add a phone number');
e.stopPropagation();
$(this).parent().html('Add a phone number');
});
/*$('dl dd input').keydown(function() {
$('this').parent().append("<br /><span class='another'>Add another</span>");
});*/
$('dl dd').delegate('input', 'click', function(e) {
e.stopPropagation();
});
/*$('.another').live('click', function() {
$(this).parent().parent().append(clone);
});*/
$('dl').delegate('.another', 'click', function(e) {
e.stopPropagation();
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number</dd>
</dl>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了[/quote]
(1)你已经基本得出结论了~
还是delegate的问题:
$('选择器A').delegate('选择器B','eventType',function(){...});
选择器A只针对页面上已存在的元素,也就是说delegate只对执行时页面上已存在的元素进行绑定,不负责执行后又动态添加的元素。
(2)用你的代码来说,就是:
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
这一句在执行的时候,‘.another’在页面上存在与否不重要,但是‘dl dd’必须是存在的(如果不存在匹配‘dl dd’的元素,那么这个delegate的绑定就相当于给不存在的元素进行绑定--无效且毫无意义;如果存在,则对每个匹配的元素进行绑定)。
而你的代码这一句在执行的时候,html中只有一个dd,所以只给这个dd进行了绑定。至于后面新添加的dd,因为这些dd在delegate执行的时候是不存在的,所以不会被绑定事件函数。
改成$('dl')为什么都会弹出,相信楼主也已经明白了吧~[/quote]
还有个地方不明白
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
$(function() {
$('#divId').click(function() {
alert('click');
//$('#di').attr('id', 'divd');
$(this).html("<div class='di'>sfsfsfsfsfsfsfsf</div>");
});
$(document).delegate('.di', 'click', function() {
alert('delegate');
});
});
</script>
</head>
<body>
<div id='divId'>
<div class='di'>
ljljljsfsfsf
</div>
</div>
</body>
</html>
为什么这样可以
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
var clone;
$(function() {
$('dl dd').click(function() {
//$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
$(this).html("<span class='another'>Add another</span>");
clone = $(this).clone(true);
alert('click');
});
$('dl').delegate('.another', 'click', function() {
//e.stopPropagation();
alert('another');
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number<span class='another'>sfsfsfsfsf</span></dd>
</dl>
</body>
</html>
这样不行呢?[/quote]
在不行的这段代码中,实际执行如下:
点击another,click事件开始冒泡==>another并没有绑定click事件函数所以冒泡到dd==>因为dd被绑定了click事件函数,所以dd的click函数开始执行(执行内容为将当前dd内的html替换成新的html->'<span class='another'>Add another</span>',然后把dd节点复制给变量clone,最后弹出字符串“click”)==>dd的监听函数执行完后,click继续冒泡到dl==>dl上虽然绑定了click函数,但是是通过delegate绑定的,所以需要先检查你最开始点击的那个元素是否匹配选择器‘.another’,但是:此时你点击的那个another早已不存在了,因为dd的监听函数执行时已经重写了dd内的html(你可以理解为删除了原来的another然后又新添加了一个another),即使新写的another和你点击的那个another是一模一样的,他们两个也是毫无关系彼此独立的。之前讲过‘匹配’这个条件必需满足才会触发事件函数,现在既然元素已经不存在,delegate关于是否匹配的的检查也就无法进行,最终dl上的函数也就无法被触发,即无法弹出another。
唉 讲的我口干舌燥~~~求结贴~
[/quote]
好吧,感谢大家了<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了[/quote]
(1)你已经基本得出结论了~
还是delegate的问题:
$('选择器A').delegate('选择器B','eventType',function(){...});
选择器A只针对页面上已存在的元素,也就是说delegate只对执行时页面上已存在的元素进行绑定,不负责执行后又动态添加的元素。
(2)用你的代码来说,就是:
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
这一句在执行的时候,‘.another’在页面上存在与否不重要,但是‘dl dd’必须是存在的(如果不存在匹配‘dl dd’的元素,那么这个delegate的绑定就相当于给不存在的元素进行绑定--无效且毫无意义;如果存在,则对每个匹配的元素进行绑定)。
而你的代码这一句在执行的时候,html中只有一个dd,所以只给这个dd进行了绑定。至于后面新添加的dd,因为这些dd在delegate执行的时候是不存在的,所以不会被绑定事件函数。
改成$('dl')为什么都会弹出,相信楼主也已经明白了吧~[/quote]
还有个地方不明白
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
$(function() {
$('#divId').click(function() {
alert('click');
//$('#di').attr('id', 'divd');
$(this).html("<div class='di'>sfsfsfsfsfsfsfsf</div>");
});
$(document).delegate('.di', 'click', function() {
alert('delegate');
});
});
</script>
</head>
<body>
<div id='divId'>
<div class='di'>
ljljljsfsfsf
</div>
</div>
</body>
</html>
为什么这样可以
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
var clone;
$(function() {
$('dl dd').click(function() {
//$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
$(this).html("<span class='another'>Add another</span>");
clone = $(this).clone(true);
alert('click');
});
$('dl').delegate('.another', 'click', function() {
//e.stopPropagation();
alert('another');
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number<span class='another'>sfsfsfsfsf</span></dd>
</dl>
</body>
</html>
这样不行呢?[/quote]
在不行的这段代码中,实际执行如下:
点击another,click事件开始冒泡==>another并没有绑定click事件函数所以冒泡到dd==>因为dd被绑定了click事件函数,所以dd的click函数开始执行(执行内容为将当前dd内的html替换成新的html->'<span class='another'>Add another</span>',然后把dd节点复制给变量clone,最后弹出字符串“click”)==>dd的监听函数执行完后,click继续冒泡到dl==>dl上虽然绑定了click函数,但是是通过delegate绑定的,所以需要先检查你最开始点击的那个元素是否匹配选择器‘.another’,但是:此时你点击的那个another早已不存在了,因为dd的监听函数执行时已经重写了dd内的html(你可以理解为删除了原来的another然后又新添加了一个another),即使新写的another和你点击的那个another是一模一样的,他们两个也是毫无关系彼此独立的。之前讲过‘匹配’这个条件必需满足才会触发事件函数,现在既然元素已经不存在,delegate关于是否匹配的的检查也就无法进行,最终dl上的函数也就无法被触发,即无法弹出another。
唉 讲的我口干舌燥~~~求结贴~
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了[/quote]
(1)你已经基本得出结论了~
还是delegate的问题:
$('选择器A').delegate('选择器B','eventType',function(){...});
选择器A只针对页面上已存在的元素,也就是说delegate只对执行时页面上已存在的元素进行绑定,不负责执行后又动态添加的元素。
(2)用你的代码来说,就是:
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
这一句在执行的时候,‘.another’在页面上存在与否不重要,但是‘dl dd’必须是存在的(如果不存在匹配‘dl dd’的元素,那么这个delegate的绑定就相当于给不存在的元素进行绑定--无效且毫无意义;如果存在,则对每个匹配的元素进行绑定)。
而你的代码这一句在执行的时候,html中只有一个dd,所以只给这个dd进行了绑定。至于后面新添加的dd,因为这些dd在delegate执行的时候是不存在的,所以不会被绑定事件函数。
改成$('dl')为什么都会弹出,相信楼主也已经明白了吧~[/quote]
还有个地方不明白
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
$(function() {
$('#divId').click(function() {
alert('click');
//$('#di').attr('id', 'divd');
$(this).html("<div class='di'>sfsfsfsfsfsfsfsf</div>");
});
$(document).delegate('.di', 'click', function() {
alert('delegate');
});
});
</script>
</head>
<body>
<div id='divId'>
<div class='di'>
ljljljsfsfsf
</div>
</div>
</body>
</html>
为什么这样可以
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
var clone;
$(function() {
$('dl dd').click(function() {
//$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
$(this).html("<span class='another'>Add another</span>");
clone = $(this).clone(true);
alert('click');
});
$('dl').delegate('.another', 'click', function() {
//e.stopPropagation();
alert('another');
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number<span class='another'>sfsfsfsfsf</span></dd>
</dl>
</body>
</html>
这样不行呢?<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
$(function() {
$('#divId').click(function() {
alert('divId');
});
$(document).delegate('#di', 'click', function(e) {
e.stopPropagation();
alert('#di');
});
});
</script>
</head>
<body>
<div id='divId'>
<div id='di'>
ljljj
</div>
</div>
</body>
</html>
在委托事件中,若想阻止事件冒泡,也必需得找到匹配元素
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
var clone;
$(function() {
$('dl dd').click(function() {
$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
clone = $(this).clone(true);
alert('click');
});
$('dl').delegate('.another', 'click', function(e) {
e.stopPropagation();
alert('another');
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number</dd>
</dl>
</body>
</html>
上面的先执行的始终是dd的click事件
当执行了dd的click事件了,这时target已经被改变了,所以冒泡事件不会被执行了<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了[/quote]
(1)你已经基本得出结论了~
还是delegate的问题:
$('选择器A').delegate('选择器B','eventType',function(){...});
选择器A只针对页面上已存在的元素,也就是说delegate只对执行时页面上已存在的元素进行绑定,不负责执行后又动态添加的元素。
(2)用你的代码来说,就是:
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
这一句在执行的时候,‘.another’在页面上存在与否不重要,但是‘dl dd’必须是存在的(如果不存在匹配‘dl dd’的元素,那么这个delegate的绑定就相当于给不存在的元素进行绑定--无效且毫无意义;如果存在,则对每个匹配的元素进行绑定)。
而你的代码这一句在执行的时候,html中只有一个dd,所以只给这个dd进行了绑定。至于后面新添加的dd,因为这些dd在delegate执行的时候是不存在的,所以不会被绑定事件函数。
改成$('dl')为什么都会弹出,相信楼主也已经明白了吧~[/quote]
在不理解jquery的delegate源码的情况下,经过大家无私帮助,自己基本已经理解
var clone;
$(function() {
$('dl dd').click(function() {
$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
clone = $(this).clone(true);
alert('click');
});
$('dl dd').delegate('.another', 'click', function(e) {
//e.stopPropagation();
alert('another');
$(this).parent().parent().append(clone);
});
});
$('dl dd').click(... 是给页面上仅存在的一个dd加click事件
事件中有一个关键就是clone=$(this).clone(true);加了true不仅把页面上仅存的那个dd的click事件给复制了,而且把dd的代理事件也复制了
$('dl dd').delegate('.another', 'click',...是给页面上存在的那个dd加代理事件
第一次点击.another事件冒泡到dd就执行代理事件,接着执行绑定给dd的事件
第二次点击.another,由于已经dd保存事件了,包括代理事件,即$('dd').delegate(...所以还会执行
当加了e.stopPropagation();后代理事件照样执行,但是dd的click事件却被阻止了,也就是clone不能被重新赋值了,
这里clone每次被append进去后再append就没效果了,必需被重新赋值
关于事件委托的弊端
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
$(function() {
$('#divId').click(function() {
alert('divId');
});
$(document).delegate('#di', 'click', function() {
alert('#di');
});
});
</script>
</head>
<body>
<div id='divId'>
<div id='di'>
ljljj
</div>
</div>
</body>
</html>
这里明明点击了最内层的di,可是先弹出的是divId
这说明,执行委托事件的条件是必需冒泡到匹配元素
关于先执行委托事件还是直接绑定的事件
先执行直接绑定的事件
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script type='text/javascript'>
/*$(function() {
$('dl').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});*/
$(function() {
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
$('button').click(function() {
$('dl').append($("<dd><div class='another'>gggggggggggggg</div></dd>"));
});
});
</script>
</head>
<body>
<dl>
<dd>
<div class='another'>sfsfsf</div>
</dd>
</dl>
<button>按钮</button>
</body>
</html>
我的疑惑是给dd click如果不用代理就只能给一个dd加 click
如果用代理 即$('dl')给所有dl下的dd加click,那么后来添加的.another也被添加了事件了
我这个例子证明了这个问题
如果用$('dl dd')的话,那么通过button添加的.another就得不到代理事件了[/quote]
(1)你已经基本得出结论了~
还是delegate的问题:
$('选择器A').delegate('选择器B','eventType',function(){...});
选择器A只针对页面上已存在的元素,也就是说delegate只对执行时页面上已存在的元素进行绑定,不负责执行后又动态添加的元素。
(2)用你的代码来说,就是:
$('dl dd').delegate('.another', 'click', function() {
alert('dd');
});
这一句在执行的时候,‘.another’在页面上存在与否不重要,但是‘dl dd’必须是存在的(如果不存在匹配‘dl dd’的元素,那么这个delegate的绑定就相当于给不存在的元素进行绑定--无效且毫无意义;如果存在,则对每个匹配的元素进行绑定)。
而你的代码这一句在执行的时候,html中只有一个dd,所以只给这个dd进行了绑定。至于后面新添加的dd,因为这些dd在delegate执行的时候是不存在的,所以不会被绑定事件函数。
改成$('dl')为什么都会弹出,相信楼主也已经明白了吧~<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd class='dd'>Add a phone number</dd>
</dl>
<div></div>
<script type='text/javascript'>
var clone,k = 0;
$(function() {
$('dl dd').click(function() {
$(this).html("<input type='text' /> <select><option value='Work'>Work</option></select> <span class='close'>x</span><br /><span class='another'>Add another</span>");
//$(this).off('click');
$(this).css('background-color', 'red');
clone = $(this).clone(true);
console.log($('dl dd').size + '?');
k++;
$('div').html(k);
});
/*$('.close').live('click', function() {
$(this).parent().html('Add a phone number');
});*/
$('dl dd').delegate('.close', 'click', function(e) {
//$(this).parent().html('Add a phone number');
e.stopPropagation();
$(this).parent().html('Add a phone number');
});
/*$('dl dd input').keydown(function() {
$('this').parent().append("<br /><span class='another'>Add another</span>");
});*/
$('dl dd').delegate('input', 'click', function(e) {
e.stopPropagation();
});
/*$('.another').live('click', function() {
$(this).parent().parent().append(clone);
});*/
$('dl dd').delegate('.another', 'click', function(e) {
//e.stopPropagation();
console.log('h');
$(this).parent().parent().append(clone);
});
});
</script>
</body>
</html>
应该只给一个dd绑定事件吧
获得大小为什么显示函数?