2015-10-19 3 views
1

Я делаю событие, когда страница проверяет, нужно ли передавать данные через POST или если простые вызовы ajax в порядке. IE: есть файл, и ему нужно обрабатывать загрузку, если файл не отправляет данные и не продолжает использовать страницу.Jquery on submit без цикла

$(document).on("submit", "form", function (e) { 
    e.preventDefault(); 
    if($(this).find('[name=file]').val()) { // HAS FILE SUBMIT 
      /* 
       If I use $(this).submit() then it just loops. I figured return true might work or putting e.preventDefault(); after this code 
      */ 
    } 


    // If it made it past that if then does ajax things that are fine. 
} 

Заранее спасибо.

+0

Просто используйте 'this.submit()' вместо этого, чтобы фактически отправить форму, а не просто вызвать обработчик событий? – adeneo

+0

@adeneo, это правильный ответ, пожалуйста, опубликуйте его, и я приму его. Если вы используете jquery, это будет просто loop. Я тоже должен был это пробовать. Другой ответ недостоверный. – Iscariot

ответ

1

Использование JQuery-х $(this).submit() будет вызывать обработчик события, и предотвратить действие по умолчанию, поэтому форма никогда не подчиняется, это только петли вместо этого.

Чтобы это не произошло, используйте вместо этого родной this.submit().

$(document).on("submit", "form", function (e) { 
    e.preventDefault(); 
    if ($(this).find('[name=file]').val()) { // HAS FILE SUBMIT 
     this.submit(); 
    } else { 
     $.ajax(options); // ...etc 
    } 
} 
+0

Не может быть плохой идеей объяснить разницу между 'this' и' $ (this) '. – Sparky

0

Я не тестировал его, но не можете ли вы просто проверить файл в первую очередь, а затем, если нет файла, выполните предупреждение по умолчанию (или верните false)?

$(document).on("submit", "form", function (e) { 
    if($(this).find('[name=file]').val()) { 
     return true; 
    } 
    else { 
     e.preventDefault(); 
     // Do AJAX 
    } 
} 
+0

Да, и я сказал, что уже пробовал, что в комментариях это не работает. Ahh, я вижу, что комментарий должен прокручиваться, и вы не читали, что я это уже написал. – Iscariot