2012-03-12 2 views
2

У меня есть этот очень простой скрипт jQuery, который дает мне ошибку, что задержка не является функцией.jQuery 1.7.1 - проблемы задержки затухания

Что я делаю неправильно? Дело в том, что все работает, за исключением того, что задержки вызывает сообщение об ошибке: S

Я убедился я загружаю только JQuery библиотеку один раз, что также последняя версия 1.7.1

function statusInquiry(orderItemID) 
{ 
    var loadUrl = "bl_updaInfo.php"; 

    $.post( 
     loadUrl, 
     {"orderItemID": orderItemID, "type": "statusInquiry"}, 
     function(responseText){ 
      $("#reportArea" + orderItemID).fadeIn("slow").html(responseText); 
     }, 
     "html" 
    ); 
    updateLogList(orderItemID); 

    $("#reportArea" + orderItemID).delay(10000).fadeOut("slow"); 
} 

ОШИБКА Я получаю : - [19:44:10.792] $("#reportArea" + orderItemID).delay is not a function

responseText именно это:

<table class="tablerainbow-noborder" cellpadding="0" cellspacing="0"> 
<tbody> 
<tr> 
<td style="color: #888786;" width="70%">Client requests status for this search.</td> 
<td style="color: #888786;">Posted 2012-03-12 12:34:22 by Client</td> 
</tr> 
</tbody> 
</table> 
+0

Что вы пытаетесь сделать? Вы хотите исчезнуть через 10 секунд или подождать 10 секунд, а затем исчезнуть? – websymphony

+0

Вы передаете строковое значение. Вы пробовали пропустить число (без кавычек) ?. – TLS

+0

@TLS Да, я пробовал это. – ProDraz

ответ

1

Вы прошли мимо значения string. Вы пробовали пропустить число (без кавычек)?

Кроме того, вы уверены, что используете его так, как он был предназначен? Согласно jQuery API docs, delay влияет на анимацию next в очереди, а не те, которые уже выполнены.

В конечном счете, ответ зависит от того, что вы хотите сделать. Команда fadeOut не будет затронута вызовом на delay, если после в цепочке вызовов появится delay. Если вы хотите приостановить бит до того, как произойдет fadeOut, вам нужно будет переключить два вызова.

EDIT: Больше мыслей, основанных на некотором взаимодействии с @Adrov.

Из jQuery API docs для post, вы можете захотеть взглянуть на содержимое responseText объекта, когда он переходит в success обратного вызова. Если вы поместите полную страницу HTML в существующий тег div, вы столкнетесь с конфликтами и странным поведением. Пример ниже прямо из документов jQuery. Обратите внимание, как выполняется find по результатам, прежде чем помещать данные в существующую страницу.

$.post(url, { s: term }, 
     function(data) { 
      var content = $(data).find('#content'); 
      $("#result").empty().append(content); 
     } 
    ); 

РЕДАКТИРОВАТЬ Примечание: Ken Redler's answer предлагает цепь с delay и fadeOut методы внутри success обратного вызова для метода post. Я просто хочу убедиться, что это предложение не затеряется, поскольку это очень хорошее предложение.

+0

Я попытался переключить их, укажу, что im получаю ошибку ... – ProDraz

2

Попробуйте

$("#reportArea" + orderItemID).delay(10000).fadeOut("slow"); 
+0

Я пробовал это: S – ProDraz

+0

Все еще не работает? – websymphony

2

Поскольку анимация fadeIn находится в обратном вызове с вызовом ajax, вам следует также перемещать fadeOut. В противном случае ваш fadeOut будет запускаться (или пытаться запустить) до отображения элемента.

Так что-то вроде этого:

function statusInquiry(orderItemID) { 
    var loadUrl = "bl_updaInfo.php"; 

    $.post( 
    loadUrl, 
    {"orderItemID": orderItemID, "type": "statusInquiry"}, 
    function(responseText){ 
     $("#reportArea" + orderItemID) 
     .html(responseText) // makes more sense here, before animation functions 
     .fadeIn("slow") 
     .delay(10000) // pass a number, not a string 
     .fadeOut("slow"); 
    }, 
    "html" 
); 

    updateLogList(orderItemID); // You might also want this in the success function 
} 
+1

Хороший вызов, перемещающий все анимации в обратный вызов. Это позволяет сэкономить массу головных болей с учетом времени анимации, а также устранить неполадку. – TLS

Смежные вопросы