bizzi
@bizzi
junior php web developer

Почему не отправляет форму по событию change?

$("input[type=file]").on('change', function (e) {

        $($(this).siblings('input[type=submit]')).click( function( e ) {
           
            console.log(this);
            e.preventDefault();

        } );

    });


Почему не отрабатывает?
Если просто нажимаю на кнопку отправить то срабатывает, а надо бы что бы после загрузки картинки уже срабатывало.
В чем может быть проблема?
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 2
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Форма может сработать и по нажатию Enter, к примеру. Так что, не верно ловить клик по сабмиту.

Можно сделать вот так:
$("form").on("submit", function(e){
  $("input[type=file]").val()||e.preventDefault();
});


Или вот так:
var acess = false;

$("input[type=file]").one("change", function(){
  acess = true;
});

$("form").on("submit", function(e){
  acess||e.preventDefault();
});


Или еще круче:
var form = $("form");

form.on("submit", function(){
  e.preventDefault();
}).siblings("input[type=file]")
 .one("change", function(){
   form.off("submit");
});


Почему ваш код не работает
//При выборе файла
$("input[type=file]").on('change', function (e) { 
  //Ставим обработчик
  $($(this).siblings('input[type=submit]')).click( function( e ) { 
      //Который запрещает отправку формы по нажатию на кнопку
     e.preventDefault();
  });
});



UPD:
А вообще, есть замечательный атрибут required - и ни какого JS не нужно.
Ответ написан
Комментировать
GreenBee
@GreenBee
ASP.NET программист
Так у вас же e.preventDefault(); который как раз отменяет сабмит формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы