$('元素')。click()无法正常工作

时间:2015-08-26 02:58:51

标签: javascript jquery

这是我的文件输入元素:

<input type="file" id="StudentPhoto" value="StudentPhoto" style="display: none;">

这是验证功能:

$(document).ready(function() {
    $('#StudentPhoto').change(function()
    {
        var file_data = $("#StudentPhoto").prop("files")[0];
        var size = file_data.size;
        var type = file_data.type;
        var name = file_data.name;
        var input = $("#StudentPhoto");

        if(type !== 'image/png' && type !== 'image/jpg' && type !== 'image/jpeg')
        {
            alert("Only JPG & PNG files are allowed to upload as student photo.");
            $('#StudentPhoto').click();
        }
        else if(size > 2097152)
        {
            alert("The maximum photo size is 2MB\n");
            $('#StudentPhoto').click();
        }
    });
});

如果用户选择的文件格式或大小无效,则应该弹出对话框让他再次选择该文件,但它没有,语句{{1 \ n}在函数中没有工作。为什么?还有其他方法吗?

4 个答案:

答案 0 :(得分:0)

或者您可以使用.trigger()方法在按钮上触发click事件。我们也会使用input,因为您已经存储了文件字段。

input.trigger('click');

希望这有帮助。

答案 1 :(得分:0)

您可以使用HTML DOM click()方法:

document.getElementById('StudentPhoto').click();

答案 2 :(得分:0)

将文件输入元素更改为:

dmsetup

请注意,我使用的是<input type="file" id="StudentPhoto" value="StudentPhoto" style="visibility: hidden">,而不是visibility: hidden

无法在未显示的文件输入上调用click事件。

答案 3 :(得分:0)

试试这个:

$(function() {
    function onStudentPhotoChange($element) {
        var file_data = $element.prop("files")[0];
        var size = file_data.size;
        var type = file_data.type;
        var name = file_data.name;

        switch(true) {
          case (type !== 'image/png' && type !== 'image/jpg' && type !== 'image/jpeg') :
            alert("Only JPG & PNG files are allowed to upload as student photo.");
            onStudentPhotoChange($element);
            break;

          case (size > 2097152) :
            alert("The maximum photo size is 2MB\n");
            onStudentPhotoChange($element);
            break;
        }
    }

    $('#StudentPhoto').change(function()
    {
        onStudentPhotoChange($this);
    });
});