"返回"不处理输入类型文件的更改事件

时间:2017-05-02 07:03:13

标签: javascript jquery internet-explorer file-io

我正在运行以下代码,它在chrome / firefox中正常工作,在IE.in IE中无法工作后执行返回它再次进入事件处理程序,这就是为什么我的验证消息无法在IE中工作。(i我正在使用IE10)

添加了整个事件处理程序:

 $('#image-select').change(function (e) {
    event.preventDefault ? event.preventDefault() : (event.returnValue = false);
    HideImageValMsg();
    var imageFiles = (apQuery('#image-select'))[0].files;
        var file = imageFiles[0];
        var filename = file.name;
        var imageArr = ["gif", "jpg", "png", "jpeg", "bmp", "tif", "tiff"];
        if (imageArr.indexOf(filename.substring(filename.lastIndexOf('.') + 1).toLowerCase()) == -1) {
            $('#divInvalidImage').removeClass("apUI-hidden");
            $('#image-name').text('');
            $('#image-select').val('');
            return;
        }
        var fileNameWtoext = filename.substr(0, filename.lastIndexOf('.')) || filename;
        if (fileNameWtoext.startsWith('.') || fileNameWtoext.endsWith('.') || /[%&*"'?#<>:{}(),.\/|~\\]+/gi.test(fileNameWtoext) || file.size == 0) {
            $('#divInvalidImageNm').removeClass("apUI-hidden");
            $('#image-name').text('');
            $('#image-select').val('');
            return;
        }
        if (fileNameWtoext.length > 100) {
        $('#divFileLength').removeClass("apUI-hidden");
            $('#image-name').text('');
            $('#image-select').val('');
            return;
        }
        $('#image-name').text(imageFiles[0].name);
});

此代码有替代或问题吗?

1 个答案:

答案 0 :(得分:0)

您正在调用输入#image-select的更改事件,并且您正在更改函数内部的值,因此在执行返回之后,它再次进入更改事件处理程序中以获取您设置的值,

 $('#image-select').val('');

所以你可以尝试下面的代码,你可以在你的更改事件处理程序的开头检查输入的值,然后再从那里返回false,

 $('#image-select').change(function (e) {
      if ($('#image-select').val() == "") {
        return false;
    }   
      //Add your code here...
   });

此处无需添加以下行以防止回调,

 event.preventDefault ? event.preventDefault() : (event.returnValue = false);

如果您遇到任何问题,请告诉我。