代码之家  ›  专栏  ›  技术社区  ›  stephenbayer

yui上传程序选择文件后挂起

  •  1
  • stephenbayer  · 技术社区  · 15 年前

    下面是包含yui上传程序的用户控件中的整个代码。我有什么东西不见了吗?现在,当我在Firebug中单步执行javascript代码时,它挂在upload()函数的第一行。我在处理文件的ashx的第一行有一个断点,但从未调用它。所以,它不会走那么远。我想我只是错过了一些愚蠢的东西。我以前用过这个控件很多次,没有问题。我正在使用由yui下载的samples文件夹提供的所有css文件和图形。

    如果我没有遗漏任何东西,那么是否有一种更全面的方法来揭穿这个问题,然后通过使用firebug逐步完成JavaScript。我试过打开和关闭yui的日志,但从没有任何日志。我不知道现在该去哪里。

    <style type="text/css">
       #divFile
       {
            background-color:White;
            border:2px inset Ivory;
            height:21px;
            margin-left:-2px;
            margin-right:9px;
            width:125px;
       }
    </style>
    <ajaxToolkit:RoundedCornersExtender runat="server" Corners="All" Radius="6" ID="rceContainer" TargetControlID="pnlMMAdmin" />
    <asp:Panel ID="pnlMMAdmin" runat="server" 
     Width="100%" BackColor="Silver" ForeColor="#ffffff" Font-Bold="true" Font-Size="16px">
    <div style="padding: 5px; text-align:center; width: 100%;">
    
    <table style="width: 100% ; border: none; text-align: left;">
        <tr>
        <td style="width: 460px; vertical-align: top;">
            <!-- information panel -->
            <ajaxToolkit:RoundedCornersExtender runat="server" Corners="All" Radius="6" ID="RoundedCornersExtender1" TargetControlID="pnlInfo" />
            <asp:Panel ID="pnlInfo" runat="server" 
             Width="100%" BackColor="Silver" ForeColor="#ffffff" Font-Bold="true" Font-Size="16px">
            <div id="infoPanel" style="padding: 5px; text-align:left; width: 100%;">
            <table>
            <tr><td>Chart</td><td>
            <table><tr><td><div id="divFile" ></div></td><td><div id="uploaderContainer" style="width:60px; height:25px"></div></td></tr>
            <tr><td colspan="2"><div id="progressBar"></div></td></tr></table>
    </td></tr>
    
        </table>
    
    </div></asp:Panel>
    <script type="text/javascript" language="javascript">
        WYSIWYG.attach('<%= txtComment.ClientID %>', full);
        var uploader = new YAHOO.widget.Uploader("uploaderContainer", "assets/buttonSkin.jpg");
        uploader.addListener('contentReady', handleContentReady);
        uploader.addListener('fileSelect', onFileSelect)
        uploader.addListener('uploadStart', onUploadStart);
        uploader.addListener('uploadProgress', onUploadProgress);
        uploader.addListener('uploadCancel', onUploadCancel);
        uploader.addListener('uploadComplete', onUploadComplete);
        uploader.addListener('uploadCompleteData', onUploadResponse);
        uploader.addListener('uploadError', onUploadError);
        function handleContentReady() {
            // Allows the uploader to send log messages to trace, as well as to YAHOO.log
            uploader.setAllowLogging(false);
    
            // Restrict selection to a single file (that's what it is by default,
            // just demonstrating how).
            uploader.setAllowMultipleFiles(false);
    
            // New set of file filters.
            var ff = new Array({ description: "Images", extensions: "*.jpg;*.png;*.gif" });
    
            // Apply new set of file filters to the uploader.
            uploader.setFileFilters(ff);
        }
        var fileID;
        function onFileSelect(event) {
            for (var item in event.fileList) {
                if (YAHOO.lang.hasOwnProperty(event.fileList, item)) {
                    YAHOO.log(event.fileList[item].id);
                    fileID = event.fileList[item].id;
                }
            }
            uploader.disable();
    
            var filename = document.getElementById("divFile");
            filename.innerHTML = event.fileList[fileID].name;
    
            var progressbar = document.getElementById("progressBar");
            progressbar.innerHTML = "Please wait... Starting upload.... ";
            upload(fileID);
        }
        function upload(idFile) {
            // file hangs right here. **************************
            progressBar.innerHTML = "Upload starting... ";
            if (idFile != null) {
    
                uploader.upload(idFile, "AdminFileUploader.ashx", "POST");
                fileID = null;
            }
        }
        function handleClearFiles() {
            uploader.clearFileList();
            uploader.enable();
            fileID = null;
    
            var filename = document.getElementById("divFile");
            filename.innerHTML = "";
    
            var progressbar = document.getElementById("progressBar");
            progressbar.innerHTML = "";
        }
        function onUploadProgress(event) {
            prog = Math.round(300 * (event["bytesLoaded"] / event["bytesTotal"]));
            progbar = "<div style=\"background-color: #f00; height: 5px; width: " + prog + "px\"/>";
    
            var progressbar = document.getElementById("progressBar");
            progressbar.innerHTML = progbar;
        }
        function onUploadComplete(event) {
            uploader.clearFileList();
            uploader.enable();
    
            progbar = "<div style=\"background-color: #f00; height: 5px; width: 300px\"/>";
            var progressbar = document.getElementById("progressBar");
            progressbar.innerHTML = progbar;
            alert('File Uploaded');
        }
    
        function onUploadStart(event) {
            alert('upload start');
        }
    
        function onUploadError(event) {
            alert('upload error');
        }
    
        function onUploadCancel(event) {
            alert('upload cancel');
        }
    
        function onUploadResponse(event) {
            alert('upload response');
        }
    
    </script>
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   allenrabinovich    15 年前

    似乎progressbar变量的名称不匹配:您在其他地方都将其称为progressbar,但在upload()函数中称为progressbar。

    更大的问题是,您在onFileSelect函数中定义了progressbar变量。因此,变量的范围是有限的,不应该在其他任何地方访问。

    查看是否将ProgressBar的定义从那里移出(或使用getElementByID从使用它的任何地方的DOM中新获取)并修复大小写不匹配解决了您的问题。

        2
  •  1
  •   user1112515    13 年前

    Yui2.8与事件和上传程序有问题。除非您使用2.9事件和上载程序,否则它将无法工作。我浪费的时间比我想承认的要多,我想让2.8工作。我希望这能节省一些时间。

    推荐文章