【问题标题】:Javascript inArray not workingJavascript inArray 不起作用
【发布时间】:2016-11-24 10:43:56
【问题描述】:

我在asp .net 中使用了html 文件上传控件,尝试限制脚本块中的文件扩展名。对于inArray 中的固定文件扩展名(.pdf,.txt,.doc,.docx,.xls,.xlsx,.eml,.msg),它可以正常工作。在数组变量(array1) 中检查相同时,它不起作用。

代码:

var AllowedFileExtensions = ".pdf,.txt,.doc,.docx,.xls,.xlsx,.eml,.msg";
var array1 = new Array();
array1 = AllowedFileExtensions.split(",");
for (var i = 0; i < array1.length; i++) {
    array1[i] = "'" + array1[i] + "'";
}

var ext = $('#fileDocUpload').val().split('.').pop().toLowerCase();
ext = '.' + ext;

alert([array1]); // it throws the text = '.pdf','.txt','.doc','.docx','.xls','.xlsx','.eml','.msg'
alert(ext); // .pdf

此代码运行良好:

If ($.inArray(ext, ['.pdf','.txt','.doc','.docx','.xls','.xlsx','.eml','.msg']) == -1) {
if ($.inArray(ext.toString, array1) == -1) {
     alert('invalid extension!');
     return false 
}

此代码无效:

if ($.inArray(ext.toString, array1) == -1) {
     alert('invalid extension!');
     return false 
}

【问题讨论】:

  • 你不需要array1[i] = "'" + array1[i] + "'",你可以直接使用AllowedFileExtensions.split(",").indexOf(ext.toString) == -1
  • @Satpal,我已经尝试过了但没有成功,所以只有我尝试在它们之间添加引号..
  • @bgs: ext.toString的值是多少?
  • ext.toString = .pdf @MilindAnantwar
  • @bgs: 应该可以工作然后jsfiddle.net/qey9bLb3

标签: javascript jquery .net


【解决方案1】:

那是因为您正在修改 array1 以在每个值中添加额外的引号。它将数组修改为:

["'.pdf'", "'.txt'", "'.doc'", "'.docx'", "'.xls'", "'.xlsx'", "'.eml'", "'.msg'"]

您不需要将值放在引号中。 .split() 将在此处将值转换为数组时处理它:

var array1 = AllowedFileExtensions.split(",");
if ($.inArray(ext.toString, array1) == -1) {
    alert('invalid extension!');
    return false 
}

【讨论】:

  • 只是出于好奇:$.inArray() 是否处理案例?如果上传以 .PDF 结尾的文件,会被拒绝吗?
  • 是的,它将被拒绝。您只需要从 url 获取扩展名,然后在 inArray 中使用它
  • 没关系,在实际问题中是正确的。只是在您的答案中不可见。一切都好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2015-11-07
  • 2021-04-19
  • 2013-06-28
相关资源
最近更新 更多