2014-01-31 4 views
0

У меня есть HTML-форма, которая вызывает функцию JS для проверки полей. Эта функция JS возвращает false, если есть какие-либо ошибки, в противном случае возвращает true и добавляет GIF загрузки к надлежащему DIV.Ajax loading GIF не работает

Проблема в том, что GIF для загрузки никогда не появляется в браузере. Он просто показывает пустое место. Правильный путь GIF. Он работает только в том случае, если функция validation возвращает false вместо true после добавления GIF-файла загрузки.

Вот пример того, как мой код выглядит следующим образом:

function validate() 
{ 
    if (document.getElementById('email').value === '') 
    { 
    alert('Please enter your email'); 
    return false; 
    } else { 
    $('#loading_div').html('<img src="images/info-loading.gif" />'); 
    return true; 
    } 
} 

Фактическая функция является более сложным, но логика так же, как это выше.

Спасибо!

+0

Это потому, что выполняется действие формы и загружается новая страница – mplungjan

+0

Есть ли какие-либо ошибки JS, отображаемые на консоли? Вам также не хватает апострофа из '$ ('# loading_div)'. – Matt

+0

if ((document.getElementById ('email')). Value === '') – Prashobh

ответ

2

Это может зависеть от того, когда называется Validate - если она до $('#loading_div') полностью загружен, то он не будет работать.

В то время как вызовы AJAX являются асинхронными вещами, такими как DOM-рендеринг, нет - что вы пытаетесь сделать, пока отображается gif загрузки?

Из комментариев вы сказали это, как его называют:

<input type="Submit" id="Login" value="Login" onclick="return validate();"> 

Этот код означает, что, когда validate() возвращает ложь кнопки ничего не делает, когда он возвращает истину кнопки передачи идет и делает его поведение по умолчанию - т.е. он представляет форму. После начала подачи формы страница будет выгружена и, таким образом, не будет загружать дополнительные ресурсы.

Что вы могли бы попробовать нагружает кок первое, что-то вроде:

function validate() { 
    if (document.getElementById('email').value === '') { 
     alert('Please enter your email'); 
     return false; 
    } else { 
     // Set the loading image 
     $('#loading_div').html('<img src="images/info-loading.gif"/>'); 

     // Submit the form 200ms later 
     var $form = $(this).parents('form'); 
     window.setTimeout(function() {$form.submit();}, 200); 

     // Return false so that the form post back doesn't start right away. 
     return false; 
    } 
} 
+0

На самом деле #loading_div - пустой div, я использую его только для того, чтобы показать добавочный код, чтобы показать загружаемый GIF. – delphirules

+0

@ delphirules, это не совсем то, что я имею в виду, - загружен ли контент DOM? Предполагая, что у него есть - в каком контексте вы стреляете 'validate()'? Загрузка страницы? Содержимое DOM завершено? Перед вызовом '$ .ajax'? – Keith

+0

Да, страница загружена полностью; я вызываю validate(), когда пользователь нажимает кнопку «Вход», например: delphirules

0

Вы пытались добавить страницу, чтобы проверить путь к файлу?

Кроме того, хорошая практика для закрытия ваших элементов. Добавьте закрытие косой черты.

+0

Да, путь правильный; если я верну FALSE в моей функции проверки после добавления GIF, он будет работать. – delphirules

1

У вас есть синтаксическая ошибка. это показывается в вашем вопросе. вы не закрыли селекторную цитату. у вас также есть дополнительные ).

заменить это:

function validate { 
    if (document.getElementById('email')).value === '') { 
     alert('Please enter your email'); 
     return false; 
    } else { 
    $('#loading_div).html('<img src="images/info-loading.gif">'); 
    return true; 
    } 
} 

по:

function validate { 
    if (document.getElementById('email').value === '') { 
     alert('Please enter your email'); 
     return false; 
    } else { 

    $('#loading_div').html('<img src="images/info-loading.gif">'); 
     return true; 
    } 
    } 
+0

@ delphirules: это сработало? –

+0

Спасибо, но у фактического кода нет ошибок, я просто неправильно набрал в вопросе – delphirules

0

не А есть ли ) круглые скобки слишком много?

if (document.getElementById('email')).value === '') { 
            ^what is this? 

Было исправлено еще много ошибок синтаксиса путем повторного редактирования кода. Теперь это должно сработать.

+0

Спасибо, но у фактического кода нет ошибок, я просто неправильно набрал в вопросе – delphirules

1

У вас есть синтаксическая ошибка.

function validate() { 
     if (document.getElementById('email').value === '') { 
      alert('Please enter your email'); 
      return false; 
     } else { 
     $('#loading_div').html('<img src="images/info-loading.gif"/>'); 
     return true; 
     } 
    } 
+0

Спасибо, но у фактического кода нет ошибок, я просто набрал неверно в вопросе. – delphirules

0

Другим решением может быть, чтобы иметь загрузки GIF в DIV с самого начала, но стилизованного с display: none;, и показать/скрыть это с .toggle()

+0

Прохладный подход, но в этом случае я предварительно загрузил изображение, которое я действительно не знаю, если это будет необходимо; пользователь может отменить операцию, например. – delphirules