繁体   English   中英

在咖啡脚本中使用$(this)

[英]using $(this) with coffee script

我正在使用查询文件上传。 我在页面上有几种形式,每种形式都相同,除了一个称为“项目”的隐藏字段。 这是处理上传的咖啡脚本:

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"

这是其中一种形式的html。 从from更改为form的唯一事情是被称为“ 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'的特定元素?

更新:

这是coffee脚本编译成的内容:

(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);

请记住,在调用$('.project_file').fileupload()时会评估这些选项,因此即使$(this)是您期望的值,您也将在每个上载器上设置完全相同的url 我认为ajaxComplete不会设置任何特定的上下文,因此this回调内部的此函数本身并不是非常有用。

如果要为每个实例使用不同的选项,则必须这样说:

$('.project_file').each ->
  $(@).fileupload
    #... $(@) should be what you want in here

我不知道您为什么要将此绑定到ajaxComplete但乍看之下似乎很奇怪,我希望这可以直接由$(document).ready(...)

您忘记了缩进alert ,而将代码编译为:

jQuery(function() {
  return $(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()), {
      done: function(e, data) {
        return $('#finish-text').html("Upload finished");
      }
    });
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM