1

以下は、YUI Uploader を含むユーザー コントロールのコード全体です。私が欠けているものはありますか?現在、Firebug で JavaScript コードをステップ実行すると、upload() 関数の最初の行でハングします。ファイルを処理する ashx の最初の行にブレークポイントがありますが、呼び出されません。というわけで、そこまではいきません。私は愚かな何かを見逃しているだけだと思います。私はこれまで何度もこのコントロールを使用してきましたが、問題はありませんでした。YUI ダウンロードのサンプル フォルダーで提供されるすべての css ファイルとグラフィックを使用しています。

私が何も見逃していない場合、この問題をデバッグするためのより包括的な方法はありますか? 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>
4

2 に答える 2

1

YUI 2.8 には、イベントとアップローダに関する問題があります。2.9 イベントとアップローダーを使用しないと動作しません。2.8 を機能させるために、認めたくないほど多くの時間を無駄にしました。これで誰かがその時間を節約できることを願っています。

于 2011-12-30T16:56:41.993 に答える
1

プログレスバー変数の名前には大文字と小文字の不一致があるようです。他の場所ではプログレスバーと呼ばれていますが、upload() 関数ではプログレスバーと呼ばれています。

さらに大きな問題は、onFileSelect 関数内でプログレスバー変数を定義することです。そのため、変数はスコープが制限されており、他の場所からアクセスできないようにする必要があります。

プログレスバーの定義をそこから移動して (または getElementById を使用して使用されているすべての場所で DOM から新たに取得して)、大文字と小文字の不一致を修正することで問題が解決するかどうかを確認してください。

于 2010-03-31T18:54:25.917 に答える