2013-06-24 2 views
2

У меня есть сообщение об ошибке, это отображается, если форма отправляется и возвращает сообщение об ошибке.jQuery fadeOut если видимый

<div id="error"></div> 

FormCheck.php

<script type="text/javascript"> 
jQuery('#error', window.parent.document).html("There was an Error."); 
</script> 

Если произошла ошибка, отображается это сообщение. Моя проблема: как я могу позволить ей исчезать через 4 секунды, если она видна?

Here's, что я получил/исследовал ...

<script type="text/javascript"> 
    //if($('#error').is(':visible')) { 
    $("#error").ready(function() { 
    $("#error").delay(4000)(function() { 
$("#error").fadeOut(500); 
    }); 
    }); 
    </script> 

Couldn't выяснить, как получить это сделать ... может кто-нибудь будет так любезен, чтобы дать мне подсказку, как решить эту проблему?

ответ

5

Только сделайте SetTimeout.

$(document).ready(function(){ 
    if ($("#error").is(":visible")) { 
     setTimeout(function(){ 
      $("#error").fadeOut(500); 
     }, 4000); 
    } 
}); 

Кроме того, это выглядит вы настраиваете содержание ошибки с помощью Javascript, если это так, и вы не обновите страницу, вы можете позвонить setTimeout где бы вы делаете контейнер ошибки в fadeIn.

+1

Почему бы не '$ (« # ошибка »). delay (4000) .fadeOut (500);'? (Причина '.delay () 'не работает в коде OP, это неправильный синтаксис.) – nnnnnn

+0

На веб-сайте jQuery:' 'Метод .delay() лучше всего задерживать между эффектами jQuery в очереди. Поскольку он ограничен - это не так, для Например, предложите способ отменить задержку .delay() не является заменой встроенной функции setTimeout для JavaScript, что может быть более подходящим для определенных случаев использования. ". Хотя я думаю, что это может работать в этом сценарии – Leite

+0

Да, Я знаю, что делает 'delay()' и что etTimeout() 'делает. В этом случае 'delay()' выполнит задание, потому что вам не нужно будет его отменять. (То, что «между queued ... effects» немного вводит в заблуждение, потому что '.delay()' фактически может быть первым «эффектом» в очереди.) – nnnnnn

3

Линия

$("#error").ready(function() { 

должен быть

$(document).ready(function() { 

delay syntax

$('#foo').slideUp(300).delay(800).fadeOut(400); //example 
+0

не решает мою проблему ... fadeOut работал ... (если бы я был достаточно быстр ... но он работает только один раз ... если я включаю: видимо, он вообще не работает ... –

+0

работая без $ (документа) –

+0

И ваша задержка должна работать с правильным синтаксисом –

1
$(document).ready(function(){ 
    if ($("#error").html() != "") { 
     setTimeout(function(){ 
      $("#error").fadeOut(500); 
     }, 4000); 
    } 
}); 

Я предполагаю, что вы действительно просто установили в нем текст. Это не видимость.

+0

вы тоже это видели. он был виден с самого начала загрузки. +1 –