У меня есть форма загрузки файла, в которой я проверяю размер файла с помощью javascript, прежде чем окончательно отправить форму. Форма работает нормально, и когда я пытаюсь загрузить файл, размер которого превышает указанный размер, в первый раз отображается правильное предупреждение. Но если я снова нажму на загрузку, не выбирая другой файл, я дважды получаю одно и то же предупреждение. Если я снова повторю процесс, я получаю предупреждение 3 раза. Ниже приведен код

<script>    
var flag=0;
$('#filename').bind('change', function() { 
var filesiz =  this.files[0].size;
if (filesiz >10485760)
{flag=1;}
else 
{flag=0;}
});

function upfunc(){
  $('#smalldata').hide();
  $('#invalidfile').hide();
  $('#invalidfile9').hide();
  if($( "#UserComments" ).hasClass( "textAreaField valid" ) && $( "#filename" ).hasClass( "valid" )){
  $('#loading_image').show(); // show animation
  $( "#uploadsfrm" ).submit(function() {
  if(flag==1)
  {alert ('File size cannot exceed 10 MB.');
  $('#loading_image').hide();
  return false;
  //event.preventDefault();
  }
  else
  return true;
  });
  }
 }
</script>

Я думаю, что ошибка может быть из-за того, что я использую привязку. Любая помощь будет очень признательна.Спасибо

0
Anirudh Rautela 23 Дек 2013 в 16:38
Если вы не выбираете другой файл, тот же файл все равно будет выбран, так почему вы ожидаете другого результата?
 – 
adeneo
23 Дек 2013 в 16:42
Но я не могу понять, почему во второй раз я получаю предупреждение два раза, а затем в третий раз количество предупреждений увеличивается до трех. Также как я могу решить эту проблему?
 – 
Anirudh Rautela
23 Дек 2013 в 16:57
Это потому, что вы поместили обработчик событий внутри функции, и каждый раз, когда запускается upfunc (), добавляется новый обработчик событий и появляется другое предупреждение, делая два, затем три и т. Д.
 – 
adeneo
23 Дек 2013 в 17:00
Так что не могли бы вы направить меня в правильном направлении, поскольку я не настолько опытен.
 – 
Anirudh Rautela
23 Дек 2013 в 17:03
Извините, но я понятия не имею, где вы вызываете upfunc ()?
 – 
adeneo
23 Дек 2013 в 17:05

1 ответ

Лучший ответ

Здесь у вас вызов из нескольких событий. Каждый раз, когда вы вызываете upfunc (), вы присоединяете событие Submit. вы можете подумать об объявлении события Submit один раз или использовать $( "#uploadsfrm" ).unbind('submit') перед $( "#uploadsfrm" ).submit(function()....

Фактически, при первом вызове у вас будет 1 прослушиватель событий, при втором вызове вы присоедините еще одно событие, которое теперь суммируется до 2 ... до бесконечности. e.preventProgration или StopDefault не помогут, потому что это тот же объект, и поэтому он не останавливает вызов событий. Даже если это поможет, это всего лишь кусок плохого кода :(

2
Ori Refael 23 Дек 2013 в 18:30
Спасибо. Функция отмены привязки сделала свое дело. Теперь он работает абсолютно нормально.
 – 
Anirudh Rautela
24 Дек 2013 в 10:46