使用临时iframe和Prototype事件处理程序上传文件

时间:2010-08-04 22:28:46

标签: javascript event-handling prototypejs

我正在编写一个脚本,它将通过临时iFrame提交表单文件(图像),然后返回图像的缩略图,然后将这些图像从iFrame移动到主文档。这很好用。但我也嵌入了一个链接,如果需要,用户可以单击该链接以删除图像。此链接使用Prototype发送删除图像的请求:

<div id="upload_area">
<div class="image">
    <img src="/img/submitted/thumbnail.jpg" alt="arp" />

    <div class="delete">
        <a href="/images/del_submit/576" id="link1927905376" onclick=" event.returnValue = false; return false;">X</a>

        <script type="text/javascript"> 
            //<![CDATA[
            Event.observe('link1927905376', 'click', function(event) { new Ajax.Updater('upload_area','/images/del_submit/576', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'upload_area']}) }, false);
            //]]>
        </script>
    </div>
</div>

但是,当我加载它时,始终忽略事件侦听器。如果我通过ajax加载相同的代码而不使用iframe,它可以正常工作。我假设这是因为事件处理程序在从iframe移动到主文档时没有被注册。但我不确定如何解决这个问题......

有关制作此类作品的任何提示吗?

1 个答案:

答案 0 :(得分:0)

毕竟,解决方案相当简单。由于我使用非Prototype脚本将响应从iframe移动到页面上的div,因此我只需在移动后调用容器上的evalScripts():

window.parent.$m(id_element).innerHTML.evalScripts();

在正常的Ajax操作的情况下,Prototype默认调用evalScripts()。