jquery event.stopPropagation()不';我好像不工作

jquery event.stopPropagation()不';我好像不工作,jquery,Jquery,我正在尝试使用无序列表创建一个复制树视图。我使用ajax动态附加到此列表,并创建子列表。我已使用event.stopPropagation()阻止父事件激发,但无法阻止祖辈事件激发。这是我的密码 $('.child').click(function(event) { var uid = $(this).attr('id').substring(10); alert($('#childnodes' + uid).html()); var childProd = //an

我正在尝试使用无序列表创建一个复制树视图。我使用ajax动态附加到此列表,并创建子列表。我已使用event.stopPropagation()阻止父事件激发,但无法阻止祖辈事件激发。这是我的密码

$('.child').click(function(event) {    

var uid = $(this).attr('id').substring(10);      
alert($('#childnodes' + uid).html());  
var childProd = //an ajax command is here which gets list items          
$(this).append(childProd);           
$('#span' + uid).text('-');
$('#childnodes' + uid).unbind();
$('.child' + uid).bind('click', child);
$('#childnodes' + uid).bind('click', parent);

event.PreventDefault();
event.stopPropagation();
 });

function parent(event) {

alert("The parent fired.");

if (event.target != this) {
   return true;
   } 

var uid = $(this).attr("id").substring(10); 
$('#span' + uid).text('+');
$('#childnodes' + uid).unbind();       

$('#childnodes' + uid).childnodes().empty();
$('#childnodes' + uid).text('');
$('#childnodes' + uid).bind('click', child);

event.preventDefault();
event.stopPropagation();

}

function child(event) {     
 if (event.target != this){     
   return true;
 } 

 var uid = event.target.id.substring(10);
 var childProd = //ajax command which I retrieve list items.

  $('#childnodes' + uid).append(childProd);           
  $('#span' + uid).text('-');      
   //unbind the event
   $('#childnodes' + uid).unbind();
   $('#childnodes' + uid).bind('click', parent);
  event.preventDefault();
  event.stopPropagation();  
   }
所以我从这个列表开始

  • 项目A
  • B项
  • 项目C
然后通过单击事件展开其中一个

  • 项目A
  • 项目A1
  • 项目A2
  • B项
  • 项目C
我可以单击项目A1和项目A2,并仅触发它们的事件以获取此信息

  • 项目A
  • 项目A1
  • 项目A1B
  • 项目A2
  • B项
  • 项目C

现在的问题是,如果我点击项目A1B(孙子元素),我就会触发项目a的删除事件。有人对这个问题有什么建议吗?

您提供的缩进很难读懂您的代码

我能说的最好的情况是,在一个
stopPropagation()
调用之前,您拼写错误了一个函数名
PreventDefault()
,因此我猜执行在这一点上会失败,并且永远不会到达
stopPropagation()

这些线路:

event.PreventDefault();
event.stopPropagation();
应该是:

event.preventDefault();
event.stopPropagation();
(注意
preventDefault()
中的小写“p”)

检查控制台。可能存在错误消息。我在Safari中得到的是:

TypeError: Result of expression 'event.PreventDefault' [undefined] is not a function.

编辑:此外,如果
(event.target!=this)
,则当前不会调用
停止播放


如果总是希望调用
stopPropagation
,则将该行添加到函数顶部。否则,当您
返回true时
,将不会调用代码的其余部分。

您提供的缩进很难读取代码

我能说的最好的情况是,在一个
stopPropagation()
调用之前,您拼写错误了一个函数名
PreventDefault()
,因此我猜执行在这一点上会失败,并且永远不会到达
stopPropagation()

这些线路:

event.PreventDefault();
event.stopPropagation();
应该是:

event.preventDefault();
event.stopPropagation();
(注意
preventDefault()
中的小写“p”)

检查控制台。可能存在错误消息。我在Safari中得到的是:

TypeError: Result of expression 'event.PreventDefault' [undefined] is not a function.

编辑:此外,如果
(event.target!=this)
,则当前不会调用
停止播放


如果总是希望调用
stopPropagation
,则将该行添加到函数顶部。否则,当您
返回true时
,将不会调用其余代码。

答案是名为“child”的函数从未正确绑定到我的孩子。因此,事件没有被禁止传播,因为阻止它的函数从一开始就没有绑定到列

简而言之,我缺少这一行:
$('.child'+uid.bind('click',child')


但是没有人会注意到,因为我的代码有点难理解。我要做这件事。谢谢你的帮助

答案是名为'child'的函数从未正确绑定到我的孩子。因此,事件没有被禁止传播,因为阻止它的函数从一开始就没有绑定到列

简而言之,我缺少这一行:
$('.child'+uid.bind('click',child')


但是没有人会注意到,因为我的代码有点难理解。我要做这件事。谢谢你的帮助

嗯…我试着清理一下我的代码。很抱歉,这里太乱了;我是jQuery新手,使用jQuery时经常会出现混乱。我承认我确实对PreventDefault()进行了错误处理,但即使修复了…@Daniel-因此根据您的代码,如果
event.target!=这是
。是吗?不,我没有。我读到,把它放进去将有助于阻止一个事件冒泡;我可能误解了(我的道歉)。然而,我确实删除了该代码,但仍然得到相同的错误…@Daniel:return语句立即退出函数。执行
返回false将(在jQuery中)停止传播。问题是您正在执行
返回true,并且您是在到达
stopPropagation()
调用之前执行此操作的。如果您总是希望停止传播,请将
stopPropagation()
调用放在函数的开头。嗯……我将两者的return true切换为return false,并将事件传播设置为方法的开头…但它仍然不起作用…我不确定DOM树的工作原理是否有我遗漏的地方…嗯…我尝试过清理我的代码。很抱歉,这里太乱了;我是jQuery新手,使用jQuery时经常会出现混乱。我承认我确实对PreventDefault()进行了错误处理,但即使修复了…@Daniel-因此根据您的代码,如果
event.target!=这是
。是吗?不,我没有。我读到,把它放进去将有助于阻止一个事件冒泡;我可能误解了(我的道歉)。然而,我确实删除了该代码,但仍然得到相同的错误…@Daniel:return语句立即退出函数。执行
返回false将(在jQuery中)停止传播。问题是您正在执行
返回true,并且您是在到达
stopPropagation()
调用之前执行此操作的。如果您总是希望停止传播,请将
stopPropagation()
调用放在函数的开头。嗯……我将return true切换为return false,并将event propagation设置为方法的开头……但它仍然不起作用……我不确定DOM树的工作方式是否有我遗漏的地方。。。