jQuery при отправке preventDefault() не работает

У меня есть html-форма с кнопкой отправки и элементом управления input='file':

<form action="/Profile/UploadFile" enctype="multipart/form-data" method="post" onsubmit="OnUploadSubmit(this)"> 

Функция OnUploadSubmit выглядит так:

  if (e.files[0].size > 5000000) {
        $('#upload_error').css('display', 'block');
        $('#upload_error').text('The file size is too large for upload')
        e.preventDefault();
        return false;
    }

    var files = e.files;
    var ext = $('#file_uploader').val().split('.').pop().toLowerCase();
    if ($.inArray(ext, ['jpeg', 'jpg', 'png']) == -1) {
        $('#upload_error').css('display', 'block');
        $('#upload_error').text('Only, jpg, jpeg, png is allowed');
        e.preventDefault();
        return false;
    }
    return true;
}

e.preventDefault() и вернуть false; не рабочая форма все равно отправляется.

Кто-нибудь знает, в чем моя проблема?

Спасибо


person Irakli Lekishvili    schedule 11.05.2012    source источник
comment
e должен быть объектом события, который вы можете получить в качестве первого аргумента вашего обработчика.   -  person VisioN    schedule 11.05.2012
comment
Я думаю, вам нужно onsubmit=return OnUploadSubmit(это)   -  person dougajmcdonald    schedule 11.05.2012


Ответы (4)


сначала вы не можете использовать preventDefault таким образом, потому что вы не передали объект события в функцию, а затем:

onsubmit="return OnUploadSubmit(this)"

Я рекомендовал:

добавить атрибут id и удалить onsubmit:

<form id="upload" action="/Profile/UploadFile" enctype="multipart/form-data" method="post"> 

jQuery:

$(function(){ // Document Ready

        $('#upload').submit(function(e){

        e.preventDefault();
         if (e.files[0].size > 5000000) {
                $('#upload_error').css('display', 'block');
                $('#upload_error').text('The file size is too large for upload')
            }

            var files = e.files;
            var ext = $('#file_uploader').val().split('.').pop().toLowerCase();
            if ($.inArray(ext, ['jpeg', 'jpg', 'png']) == -1) {
                $('#upload_error').css('display', 'block');
                $('#upload_error').text('Only, jpg, jpeg, png is allowed');
            }
        }

    });

});
person Hadi Mostafapour    schedule 11.05.2012

Содержит ли ваше определение метода для OnUploadSubmit e в качестве параметра? Если это не так, e.preventDefault не будет работать.

person Ryan Lanciaux    schedule 11.05.2012

Вы пробовали onsubmit="return OnUploadSubmit(this);" вместо onsubmit="OnUploadSubmit(this)"?

person Michael    schedule 11.05.2012

Я думаю, вам нужно onsubmit="return OnUploadSubmit(this)"

person dougajmcdonald    schedule 11.05.2012