【问题标题】:Jquery File Validation with Dynamically Created File input Fields使用动态创建的文件输入字段进行 Jquery 文件验证
【发布时间】:2016-01-04 12:51:40
【问题描述】:

我想验证 sizeextension 等文件输入字段。

我将根据客户要求添加更多文件输入字段。看截图

https://drive.google.com/file/d/0B7DnAEDiJntwY0pkeXlya0xPdzg/view?usp=sharing

当我使用以下函数检查文件名和大小时。但它不适用于动态创建的元素。

 <span class="input-group-addon btn btn-Choose btn-file">
   <span class="fileinput-new">Browse File</span>
   <span class="fileinput-exists">Change</span>
   <input class="fileimgval" type="file" name="brchrimg[]">
 </span>

 $(document).on('change','input:file',function(){
    var fileName = $(this).val();
    alert(fileName);
  });

当用户点击加号按钮时,会生成一个新的上传字段并使用它进行操作。

如何在 jquery 中获取文件名和大小?

谢谢

【问题讨论】:

  • 它在静态 html 元素上完美运行......但我想获取动态附加文件输入的文件大小。
  • 在哪个事件上?由于您使用了事件委托,所以这应该不是问题..
  • 相同。在文件更改事件中,我想获取文件的详细信息,例如大小和扩展名.. 该事件现在不适用于动态字段....
  • 我通常不推荐插件,但这个值得一看:hayageek.com/docs/jquery-upload-file.php。自从试用后,我现在在所有项目中都使用它。

标签: javascript jquery html file-upload


【解决方案1】:

HTML 5 File API 规范,文件的一些属性可以在客户端访问,文件大小就是其中之一。所以想法是使用 size 属性并找出文件大小。但由于它是 HTML 5 规范的一部分,所以它只适用于现代浏览器。 [Ref]

试试这个:

$(document).on('change', 'input:file', function() {
  var fileName = $(this).val();
  var iSize = $(this)[0].files[0].size / 1024;
  var size = '';
  if (iSize / 1024 > 1) {
    if (((iSize / 1024) / 1024) > 1) {
      iSize = (Math.round(((iSize / 1024) / 1024) * 100) / 100);
      size = iSize + "Gb";
    } else {
      iSize = (Math.round((iSize / 1024) * 100) / 100);
      size = iSize + "Mb";
    }
  } else {
    iSize = (Math.round(iSize * 100) / 100);
    size = iSize + "kb";
  }
  alert('fileName: ' + fileName + '  size: ' + size);
});
$('#addMore').on('click', function() {
  var html = '<br><span class="input-group-addon btn btn-Choose btn-file">\
   <span class="fileinput-new">Browse File</span>\
<span class="fileinput-exists">Change</span>\
<input class="fileimgval" type="file" name="brchrimg[]">\
</span>';
  $('#parent').append(html);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id='parent'>
  <span class="input-group-addon btn btn-Choose btn-file">
   <span class="fileinput-new">Browse File</span>
  <span class="fileinput-exists">Change</span>
  <input class="fileimgval" type="file" name="brchrimg[]">
  </span>
</div>
<Button id='addMore'>Add More</Button>

Fiddle here

【讨论】:

  • 老兄,这个函数没有触发事件。 :(
  • 有一个按钮-> 运行代码 sn-p 点击它让我知道提供的代码是否工作?在我看来,它正在按预期工作。您还可以通过提供的 Fiddle ..
  • 它对他的小提琴和堆栈答案起作用。但不在我的代码中。为什么?
  • jquery 版本有问题吗.. 我用的是 1.11.1
  • 如果它在提供的示例中工作,那么必须在您的代码中缺少某些内容。你能提供一个小提琴让我们理解这个问题吗..
猜你喜欢
  • 2012-10-18
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多