JQuery скрыть Div, который загружается с помощью JQuery

0

Я создаю веб-сайт и использую jquery для отправки формы. Когда я нажимаю кнопку отправки, функция jquery отправляет форму в файл php. Файл php создает ошибку результата или успех. Результат отражается файлом php, а файл jquery выводит эхо с использованием метода .html().

Я вызываю вывод html #result.

Поэтому мой вопрос: как скрыть #result с помощью jquery. Это должно произойти через 5 секунд.

Это отлично работает, когда #result загружается страницей. Но не при #result как сказано выше.

setTimeout(function(){ 
      $('#result').slideUp(500);  
}, 5000);
  • 2
    Можете ли вы показать нам оставшуюся часть кода JavaScript, включая часть, которая делает запрос на публикацию?
  • 1
    Разве вы не можете сделать setTimeout при success setTimeout вашей функции AJAX?

3 ответа

0

Вещь #result иногда динамически добавляется в DOM, а функции jQuery обычно загружаются, когда документ готов, чтобы решить эту проблему, вы должны слушать изменения DOM. Если по какой-то причине вы не используете AJAX или вам нужен другой подход, вы можете попробовать следующее:

function hideMsg(){
    // Hide dynamically added div
    setTimeout(function(){ 
          $('#result').slideUp(500);  
    }, 5000);
}
// Listen DOM changes
$('.document').bind("DOMSubtreeModified", hideMsg);

Для того, чтобы это сработало, вы должны изменить документ документа с помощью обложки документа (там, где будет отображаться ваше сообщение).

Пример jsFiddle: http://jsfiddle.net/laelitenetwork/GUxgX/

Приветствия.

  • 0
    это сработало очень хорошо, но через некоторое время мой браузер зависает. решение состоит в том, чтобы отправить код JavaScript, который скрывает сообщение с сообщением.
  • 0
    Недостатком этого подхода является то, что если оболочка сообщений часто меняется, она будет запускать эту функцию каждый раз. Поэтому, чтобы избежать этого, вы должны добавить пустой DIV исключительно для отображения сообщений. Тем не менее, я согласен, что было бы лучше сделать это, когда AJAX-запрос будет выполнен, посмотрите пример @dododo.
0

Я думаю, что самый простой способ - всегда иметь пустой результат div в вашем html и просто держать его скрытым. Таким образом, всякий раз, когда вы получаете результат от AJAX, вы можете просто изменить html, показать его, а затем снова согнуть его.

$("#result").html(AJAX RESULT);
$("#result").show();
setTimeout(function(){ 
      $('#result').slideUp(500);  
}, 5000);

Это изменит html div и покажет его. Затем спрячьте его через 5 секунд.

0

Вы можете использовать $.ajax с опцией обратного вызова успеха или использовать метод.done(). Пример:

$.ajax({
    url:"http://someurl/",
    success: function(data){ $('#result').html('success').show(); },
    error: function(data){ $('#result').html('error').show(); }
}).done(function(){
   setTimeout(function(){ 
       $('#result').slideUp(500);  
   }, 5000);
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню