jQuery .live('click')没有按预期工作

时间:2011-10-21 20:02:59

标签: javascript jquery

我正在尝试设置下面的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');
    }
});

3 个答案:

答案 0 :(得分:2)

有些浏览器会将src属性扩展为实际用于请求图片的网址。

使用attribute ends with selector应修复:

img[src$=/img/emblem-important.png]

答案 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显然记录为工作。