21

動的 - ajax - ギャラリーへの画像アップロード用のモジュールを使用して Rails アプリを開発しています。私はこのアプリに基づいてそれをやっています - multi-file-upload-demo。私は Javascript などにあまり熱心ではないので、その実装から多くのロジックをコピーしています。

rounders デモのすべてのロジックに従ってアプリを作成しました。すべての gem と javascript ライブラリを含めましたが、エラーが発生しました。

Uncaught TypeError: Cannot read property 'innerHTML' of null 

tmpl.js ファイルを参照する chrome コンソールで

tmpl.load = function (id) {
    return document.getElementById(id).innerHTML;
};

私の JS の知識では、どのコードがその機能をトリガーするのかがはっきりしないので、さらに先に進むことができます。

この問題の原因を調査するための次のステップを教えてください。潜在的な理由はさまざまであると予想されるため、アプリケーションからすべてのコードを貼り付けたくはありません。

4

5 に答える 5

38

これは古いですが、これに対する実際の解決策を見つけました。require inapplication.js//=require jquery-fileupload/basicではなく に変更します//= require jquery-fileupload

于 2013-02-11T23:40:50.560 に答える
20

このエラーが発生する理由は、スクリプトタグid="template-upload"またはid="template-download"またはその両方が欠落しているためです。

デモの例:http://blueimp.github.com/jQuery-File-Upload/

<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
    <tr class="template-upload fade">
        <td class="preview"><span class="fade"></span></td>
        <td class="name"><span>{%=file.name%}</span></td>
        <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
        {% if (file.error) { %}
            <td class="error" colspan="2"><span class="label label-important">Error</span> {%=file.error%}</td>
        {% } else if (o.files.valid && !i) { %}
            <td>
                <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div>
            </td>
            <td class="start">{% if (!o.options.autoUpload) { %}
                <button class="btn btn-primary">
                    <i class="icon-upload icon-white"></i>
                    <span>Start</span>
                </button>
            {% } %}</td>
        {% } else { %}
            <td colspan="2"></td>
        {% } %}
        <td class="cancel">{% if (!i) { %}
            <button class="btn btn-warning">
                <i class="icon-ban-circle icon-white"></i>
                <span>Cancel</span>
            </button>
        {% } %}</td>
    </tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
    <tr class="template-download fade">
        {% if (file.error) { %}
            <td></td>
            <td class="name"><span>{%=file.name%}</span></td>
            <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
            <td class="error" colspan="2"><span class="label label-important">Error</span> {%=file.error%}</td>
        {% } else { %}
            <td class="preview">{% if (file.thumbnail_url) { %}
                <a href="{%=file.url%}" title="{%=file.name%}" data-gallery="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
            {% } %}</td>
            <td class="name">
                <a href="{%=file.url%}" title="{%=file.name%}" data-gallery="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
            </td>
            <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
            <td colspan="2"></td>
        {% } %}
        <td class="delete">
            <button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}"{% if (file.delete_with_credentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
                <i class="icon-trash icon-white"></i>
                <span>Delete</span>
            </button>
            <input type="checkbox" name="delete" value="1">
        </td>
    </tr>
{% } %}
</script>

UIバージョンは、存在するこれらのテンプレートの両方に依存します。

私は同じ問題を抱えていて、欠けているものをチェックアウトすることにしました。

お役に立てば幸いです。

于 2013-02-15T03:58:42.923 に答える
10

私もこの同じ問題に遭遇しました。ただし、ファイルアップロードプラグインの基本バージョンをロードすることは、私にとってはオプションではありませんでした. ファイル アップロード プラグインのとオプションを に設定することで、「プレビュー」機能と と の試行された処理をケースバイケースで無効にすることがtemplate-uploadできtemplate-downloadます。uploadTemplateIddownloadTemplateIdnull

于 2013-06-14T02:48:18.400 に答える
2

エラー メッセージは、document.getElementById(id)が を返していることを示しているnullため、指定された を持つ要素は現在ドキュメントにありませんid.

デバッグするには、ステートメントconsole.log(id);の前に呼び出しを追加してみてください。これを行うと、問題の原因となっているreturn値を見つけることができます。idエラーが単純なタイプミスの結果であることを願っています。 の値idは大文字と小文字が区別されることに注意してください。idタイプミスが問題でない場合は、ブレークしたい値がわかったので、少なくとも条件付きブレークポイントを設定できます。ブレークポイントに達した後は、呼び出し元の関数にステップ スルーするだけで、「どのコードがその関数をトリガーするかを確認する」ことができます。お役に立てれば。

于 2012-07-17T19:23:28.493 に答える
1

このプラグインを数か月使用していますが、今日、ファイルのアップロードが機能しないことに気付き、エラーが発生しました

"cannot read property 'innerHTML' of null error".

調べてみましたが、単純な理由です。ファイルパス

http://blueimp.github.io/JavaScript-Load-Image/js/load-image.min.js

に変更

http://blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js

blueimp の git で。あなたがここで見ることができるように

https://github.com/blueimp/jQuery-File-Upload

このファイルのパスが変更されました。

https://github.com/blueimp/jQuery-File-Upload/blob/master/index.html

私は正しい道とその働きに変わりました。この回答が同じ問題を抱えている人に役立つことを願っています。

于 2014-09-17T23:38:54.683 に答える