我正在尝试设置下面的emblem-important.png
,所以当你点击这个项目时,它会忽略带有.editable
的监听器的父元素,并且只使用我指定的那个。以下代码在Chrome中运行良好,但不适用于IE 8.它在IE 8中无效,我需要它。如果不使用onClick(),我不确定在IE 8中设置它的最佳方法。如果我可以在JS中使用监听器进行设置,那就容易多了......
<div class="cell editable" style="float:left;width:99%; font-weight:bold; font-size:16pt; padding-bottom:50px" data-fieldid="684709" data-fieldname="Product Name">
<span id="sob_form_span_684709"><strong>Freedom Communications: Choice PPO</strong><img src="/img/emblem-important.png"></span>
</div>
//toggle the form status
jQuery('#formStatus').change(function () {
jQuery.get('/products/ajax_updateStatus/'+Page.formId+'/'+jQuery(this).val()+'/', {}, function () {
notify('check', 'Status has been updated');
});
});
jQuery('.editable').live('click', function () {
var urlPieces = (document.location+'').split('/');
jQuery.fancybox({
'href': urlPieces[0]+'/'+urlPieces[1]+'/'+urlPieces[2]+'/'+urlPieces[3]+'/update_form_field/'+jQuery(this).attr('data-fieldId'),
'title': jQuery(this).attr('data-fieldName'),
'autoDimensions': false,
'margin': 0,
'padding': 15,
'width': '768',
'scrolling': 'auto',
'height': jQuery(window).height() - 100,
'onComplete': function() {
jQuery("#fancybox-title").css({
'top':'-10px',
'bottom':'auto'
});
}
});
});
jQuery('img[src=/img/emblem-important.png]').live('click', function (e) {
e.stopPropagation();
if (confirm('Are you sure you want to restore this field to its original content?')) {
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, function (r) {
jQuery('#'+id).html(r.fieldValue);
}, 'json');
}
});
答案 0 :(得分:2)
答案 1 :(得分:1)
不会return false
很好地完成这个伎俩吗?
比照。 Jquery doc:
要在使用.live()进行绑定后停止执行其他处理程序, 处理程序必须返回false。调用.stopPropagation()不会 做到这一点。
答案 2 :(得分:0)
使用“.live()”来处理事件时,对事件调用“stopPropagation()”没有多大意义。在调用处理程序时,事件已经一直传播到body标记。
您可以简单地检查事件目标并在适当时忽略它,而不是这样做:
if ($(event.target).is('img[src=/img/emblem-important.png]'))
return; // or whatever
“live”机制通过在<body>
元素上使用框架提供的事件处理程序来工作。当该处理程序获取事件时,它会查看已注册的处理程序选择器的清单,并在目标匹配时应用其中的每一个。
编辑 - 您也可以尝试“event.stopImmediatePropagation()”。 再次编辑 nope :-)但是返回{{1显然记录为工作。