87,910
社区成员
发帖
与我相关
我的任务
分享
<style type='text/css'>
dl dt { width:100px; float:left; }
dl dd { margin-left:200px; }
</style>
<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>");
clone = $(this).clone(true);
});
$('.class').live('click', function() {
$(this).parent().html('Add a phone number');
});
$('dl dd input').keydown(function() {
$('this').parent().append("<br /><span class='another'>Add another</span>");
});
$('.another').live('click', function() {
$(this).parent().parent().append(clone);
});
});
</script>
<dl>
<dt>Phone</dt>
<dd>Add a phone number</dd>
</dl>
$('dl').delegate('.another', 'click', function(e) {...})
这一行代码并不是把click事件绑定在了.another上,实际上仍然是绑定到了dl上。
当dl的click事件被直接触发或冒泡触发(也就是说当你点击dl或者dl的后代元素),同时满足一个条件:你点击的那个元素必须是.another,这时才会执行dl上绑定的click事件函数。
(2)按照上述原理,正常的流程应该为:
1.你点击.another;
2..another的click开始冒泡-->dd-->dl,当冒泡到dl的时候,此时因为你一开始点击的是.another(匹配delegate绑定时的选择器“.another”),所以你用delegate对dl绑定的click事件函数就被触发了。
3..another的click继续冒泡-->body-->document-->window
(3)你的代码问题就出在上面的第二步,当冒泡到dd的时候,因为你在
$('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();
});
这几行代码中取消了往dl的冒泡,所以click就无法冒泡到dl,这样虽然你点击的是.another,但是dl的click事件没有被触发,所以函数就不执行了。$('dl').delegate('.another', 'click', function(e) {...})
这一行代码并不是把click事件绑定在了.another上,实际上仍然是绑定到了dl上。
当dl的click事件被直接触发或冒泡触发(也就是说当你点击dl或者dl的后代元素),同时满足一个条件:你点击的那个元素必须是.another,这时才会执行dl上绑定的click事件函数。
(2)按照上述原理,正常的流程应该为:
1.你点击.another;
2..another的click开始冒泡-->dd-->dl,当冒泡到dl的时候,此时因为你一开始点击的是.another(匹配delegate绑定时的选择器“.another”),所以你用delegate对dl绑定的click事件函数就被触发了。
3..another的click继续冒泡-->body-->document-->window
(3)你的代码问题就出在上面的第二步,当冒泡到dd的时候,因为你在
$('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();
});
这几行代码中取消了往dl的冒泡,所以click就无法冒泡到dl,这样虽然你点击的是.another,但是dl的click事件没有被触发,所以函数就不执行了。[/quote]
非常感谢<!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>
点击another为什么不添加?<!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>");
clone = $(this).clone(true);
});
$('.class').live('click', function() {
$(this).parent().html('Add a phone number');
});
$('dl dd input').keydown(function() {
$('this').parent().append("<br /><span class='another'>Add another</span>");
});
$('.another').live('click', function() {
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd>Add a phone number</dd>
</dl>
</body>
</html>
版本是最新的,就是运行了,点击了文字,出现文本框,点击文本框不能输入文字[/quote]<!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>");
clone = $(this).clone(true);
});
$('.class').live('click', function() {
$(this).parent().html('Add a phone number');
});
$('dl dd input').keydown(function() {
$('this').parent().append("<br /><span class='another'>Add another</span>");
});
$('.another').live('click', function() {
$(this).parent().parent().append(clone);
});
});
</script>
</head>
<body>
<dl>
<dt>Phone</dt>
<dd>Add a phone number</dd>
</dl>
</body>
</html>
版本是最新的,就是运行了,点击了文字,出现文本框,点击文本框不能输入文字