Javascript jQuery.live(';单击';)未按预期工作
我正在尝试设置下面的Javascript jQuery.live(';单击';)未按预期工作,javascript,jquery,Javascript,Jquery,我正在尝试设置下面的徽标important.png,因此当您单击此项时,它将忽略带有.editable的侦听器的父元素,并仅使用我分配给它的侦听器。下面的代码在Chrome中非常有效,但在IE8中却不行。它在IE 8中不起作用,我需要它。如果不使用onClick(),我不确定在IE 8中设置它的最佳方法。如果我能用JS中的监听器来设置它会容易得多 自由通信:选择PPO //切换表单状态 jQuery('#formStatus').change(函数(){ get('/products/aja
徽标important.png
,因此当您单击此项时,它将忽略带有.editable
的侦听器的父元素,并仅使用我分配给它的侦听器。下面的代码在Chrome中非常有效,但在IE8中却不行。它在IE 8中不起作用,我需要它。如果不使用onClick(),我不确定在IE 8中设置它的最佳方法。如果我能用JS中的监听器来设置它会容易得多
自由通信:选择PPO
//切换表单状态
jQuery('#formStatus').change(函数(){
get('/products/ajax_updateStatus/'+Page.formId++'/'+jQuery(this.val()++'/',{},函数(){
通知(“检查”,“状态已更新”);
});
});
jQuery('.editable').live('click',函数(){
var urlpages=(document.location+'').split('/');
jQuery.fancybox({
'href':urlpices[0]+'/'+urlpices[1]+'/'+urlpices[2]+'/'+urlpices[3]+'/update_form_field/'+jQuery(this.attr('data-fieldId'),
“title”:jQuery(this.attr('data-fieldName'),
“自动标注”:false,
“边距”:0,
“填充”:15,
“宽度”:“768”,
“滚动”:“自动”,
“height”:jQuery(window).height()-100,
“onComplete”:函数(){
jQuery(“fancybox标题”).css({
'顶部':'-10px',
“底部”:“自动”
});
}
});
});
jQuery('img[src=/img/embody-important.png]').live('click',函数(e){
e、 停止传播();
如果(确认('您确定要将此字段还原为其原始内容吗?')){
var locSplit=(document.location+'').split('/'),
id=jQuery(jQuery(e.currentTarget).parent()).attr('id'),
fieldId=jQuery(this).closest('td').attr('data-fieldId');
jQuery.get('/customs/revertField/'+locSplit[locSplit.length-1]+'/'+fieldId,函数(r){
jQuery('#'+id).html(r.fieldValue);
}“json”);
}
});
一些浏览器会将src
属性扩展到实际用于请求图像的URL
使用应修复以下问题:
img[src$=/img/emblem-important.png]
在使用“.live()”处理事件时,对事件调用“stopPropagation()”没有多大意义。在调用处理程序时,事件已经传播到body标记 不必这样做,只需检查事件目标并在适当时忽略它:
if ($(event.target).is('img[src=/img/emblem-important.png]'))
return; // or whatever
“活动”机制通过在
元素上使用框架提供的事件处理程序来工作。当该处理程序获取事件时,它会查看已注册处理程序选择器的清单,并在目标匹配时应用其中的每一个选择器
编辑-您也可以改为尝试“event.stopImmediatePropagation()”。再次编辑否:-)但是返回的
false
显然被记录为工作。不会返回false
很好地完成这个技巧吗
参见Jquery文档:
要在使用.live()绑定一次后停止执行其他处理程序,请执行以下操作:,
处理程序必须返回false。调用.stopPropagation()将不会
做到这一点
当您可以只做
id=this.parentNode.id
时,为什么要做id=jQuery(jQuery(e.currentTarget).parent()).attr('id')
?一些问题可以通过使用.delegate()而不是.live()来解决。根据事件传播到的位置,您通常可以在委托处理程序上成功停止传播,而不必返回false;“stopPropagation()”会有任何有用的效果吗?(检查了jQuery源代码,但快速浏览“live()”代码后我不清楚。)@Pointy:不会的。相反,他应该使用返回false代码>如警告中所述:.stopPropagation()
将在通过.live()
绑定的处理程序之间工作。。。没关系,我想我错了…显然我错了,我非常非常困惑…哦,等等,我明白问题是什么了。包括e.stopPropagation()
似乎确实有不同。好的-我不太清楚“.live()”代码是否引起了注意,但我想是的。我不知道这是否取决于处理程序的添加顺序;它从目标调用“.closest()”以查找要调用的处理程序,但是。。。。好吧,这让人困惑。这让人困惑,尤其是因为文件中包含了另一个答案中提到的警告。所以我想我的意思是我只是不知道!;)