0

クエリ ファイルのアップロードを使用しています。ページにいくつかのフォームがありますが、「プロジェクト」という非表示フィールドを除いて、それぞれ同じです。アップロードを処理するコーヒー スクリプトは次のとおりです。

jQuery ->
  $(document).ajaxComplete ->
    $('.project_file').fileupload
      dataType: "script"
      url: ($(this).prev('form').attr("action"))
      paramName: 'file_yo'
      formData: (form) -> 
        [{ name: 'authenticity_token',  value: $('meta[name="csrf-token"]').attr('content')}, { name: 'project',value: $(this).prev().val()}]
      alert($(this).prev().val())
      done: (e, data) ->
        $('#finish-text').html "Upload finished"

フォームの 1 つの html を次に示します。フォームからフォームに変わるのは、'project' と呼ばれる隠しフィールドの値だけです。

<form accept-charset="UTF-8" action="/projects/6/project_files" class="edit_project" data-remote="true" id="project_file_form" method="post"><div style="margin:0;padding:0;display:inline">        <input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="patch"><input name="authenticity_token" type="hidden" value="iIQXYRJfXRFAaSsvSpb4H+HEUMeAI3pubXDRyd+2Ehk="></div>
    <input id="project" name="project" type="hidden" value="6">
    <input authenticity_token="true" class="field file-field project_file" id="" name="file_yo" title="" type="file" value="">  
</form>

問題は、$(this) が未定義であることです。アラートが表示されると、未定義と表示されます。$(this) がクラス 'project_file' を持つ特定の要素を返すようにするにはどうすればよいですか?

アップデート:

コーヒー スクリプトをコンパイルすると、次のようになります。

(function() {
  jQuery(function() {
    $(document).ajaxComplete(function() {
      return $('.project_file').fileupload({
        dataType: "script",
        url: $(this).prev('form').attr("action"),
        paramName: 'file_yo',
        formData: function(form) {
          return [
            {
              name: 'authenticity_token',
              value: $('meta[name="csrf-token"]').attr('content')
            }, {
              name: 'project',
              value: $(this).prev().val()
            }
          ];
        }
      }, alert($(this).prev().val()));
    });
    return {
      done: function(e, data) {
        return $('#finish-text').html("Upload finished");
      }
    };
  });

}).call(this);
4

2 に答える 2