【问题标题】:How to validate a file input on client side (Javascript)如何在客户端验证文件输入(Javascript)
【发布时间】:2012-04-12 23:50:28
【问题描述】:

我有一个表单存储在下面的 javascript 变量中:

var $fileImage = $("<form action='imageupload.php' method='post' enctype='multipart/form-data' target='upload_target' onsubmit='startImageUpload(this);' class='imageuploadform' >" + 
"<label> Image File: <input name='fileImage' type='file' class='fileImage' /></label><br/>" +
"<input type='submit' name='submitImageBtn' class='sbtnimage' value='Upload' /></label></form>

现在您可以看到,当用户单击提交按钮时,它会提交到下面的“startImageUpload”函数:

function startImageUpload(imageuploadform){
  $(imageuploadform).find('.imagef1_upload_process').css('visibility','visible');
  $(imageuploadform).find('.imagef1_upload_form').css('visibility','hidden');
  sourceImageForm = imageuploadform;
      return true;
}

它的作用是当用户点击提交时,它会显示一个加载栏并上传表单。

现在我的问题是我想执行一个简单的 javascript 验证,当用户单击表单中的提交按钮时,它将检查文件是“png”还是“gif”文件类型。如果文件类型正确,则显示加载栏并上传表单。如果文件类型不正确,则显示一个警告,说明文件类型不正确,但不显示加载栏,也不上传表单。

有谁知道如何编码。这样我就可以使用您的答案之一中的示例,然后对其进行扩展,并使用 javascript 来验证更多文件类型和文件大小,因此如果有人可以帮助我,这将非常有帮助。

谢谢

【问题讨论】:

  • 我建议你 load() 你的表单,而不是像这样创建一个有问题的、几乎无法使用的变量......

标签: javascript jquery validation


【解决方案1】:
function startImageUpload(imageuploadform){

  var form = $(imageuploadform)
    , value = form.find('.fileImage').val()

  form.find('.imagef1_upload_process').css('visibility','visible')
  form.find('.imagef1_upload_form').css('visibility','hidden')

  if (!/\.(png|gif)$/.test(value)){
    return false
  }
  return true
}

HTML 规范也演变为包含accept 属性:

<input type="file" accept="image/png,image/gif" />

(近期支持 Chrome、Firefox 和 Opera - IE10、Safari 6)

【讨论】:

    【解决方案2】:

    你可以这样检查...

    var validExtensions = ['png', 'gif'],
        validExtensionSupplied = $.inArray(
               ($('.fileImage').val().match(/\.(.*?)]\s*$/) || [])[1],
               validExtensions) != -1;
    

    或者,您可以通过检查 $('.fileImage').prop('files')[0].type 按 MIME 类型进行验证。

    【讨论】:

    • 我也在想这样的事情。只是为了好玩,您可以使用波浪号运算符与-1 进行比较,并使用!! 转换一个布尔值。可读性较差,但更紧凑。 !!~$.inArray(($('.fileImage').val().match(/\.(.*?)$/) || [])[1], validExtensions)
    【解决方案3】:

    试试这个:

     $("#pic").change(function() {
    
        var val = $(this).val();
    
        switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
            case 'gif': case 'jpg': case 'png':
                alert("an image");
                break;
            default:
                $(this).val('');
                // error message here
                alert("not an image");
                break;
        }
    });
    

    【讨论】:

      【解决方案4】:

      这是我的解决方案,非常简单快捷

          var accept = $(event.target).attr('accept');
          //<input name='fileImage' accept='.png,.jpg,.jpeg' type='file'  class='fileImage' />
      
          value = $(event.target).val(), ext = value.substring(value.lastIndexOf('.'));
      
          if(ext && accept.indexOf(ext) == -1){
      
              console.log('No');
      
          }
      

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 2011-08-03
        • 2019-01-04
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 2017-04-07
        相关资源
        最近更新 更多