触发卸载会导致错误

时间:2014-05-28 08:04:54

标签: javascript jquery

我在Onlineshop上工作的是什么使用名为 thickbox 的插件

现在,厚箱看起来已经很老了,但它在商店里使用,我真的不想在那里改变很多。实际上是它的运行。

现在,如果客户点击图片进行缩放,则会打开一些像灯箱一样。

<div id="TB_overlay" class="TB_overlayBG"></div>
<div id="TB_window" style="margin-left: -335px; width: 670px; margin-top: -350px; display: block;">
    <a href="" id="TB_ImageOff" title="Close">
        <img id="TB_Image" src="images/product_images/popup_images/TJ3000-1.jpg" width="640" height="640">
    </a>
    <div id="TB_caption">FooBar<div id="TB_secondLine">Image 1 / 1</div>
</div>
<div id="TB_closeWindow">
    <a href="#" id="TB_closeWindowButton" title="Close">X</a>
</div>

如果再次点击它,那么thickbox会调用一个真正有意义的函数tb_remove

function tb_remove() {

    $("#TB_imageOff").unbind("click");
    $("#TB_closeWindowButton").unbind("click");
    $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger('unload').unbind().remove();});
    $("#TB_load").remove();
    if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
        $("body","html").css({height: "auto", width: "auto"});
        $("html").css("overflow","");
    }
    document.onkeydown = "";
    document.onkeyup = "";
    return false;
}

但叠加层不会关闭!

Uncaught TypeError: Cannot read property 'add' of null      //jquery-ui.js:84

如果我从

中删除.trigger('unload')
$('#TB_window,#TB_overlay,#TB_HideSelect').trigger('unload').unbind().remove();

似乎比起作用。

trigger('unload')在这种情况下做了什么?

这真的是neede吗?

我的想法是,如果一个项目被移除,它无论如何都没关系,因为它实际上被删除了。

还是我错了?!?!?

编辑

这是我发现的唯一卸载处理程序..我想我永远不会在那里结束,因为始终给出了图像名称。

if(urlType == '.jpg' || urlType == '.jpeg' )
{
    //code to show images
    //source that actually shows the lightbox
}
else
{
    //code to show html
    //some source
    $("#TB_window").unload(function () {
        $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
    });
}

1 个答案:

答案 0 :(得分:1)

  

trigger('unload')在这种情况下做了什么?

trigger为这些元素上的unload事件调用任何jQuery注册的处理程序,然后尝试触发这些元素上的本机unload事件以触发任何本机(非jQuery)处理程序。

除非你(或那个插件)的代码在某个地方挂钩unload,否则你可以删除它。但基于导致问题的原因,我的猜测是插件因某种原因挂钩了那个事件,以及事情失败的地方......