2012-02-25 4 views
1

У меня проблема. У меня есть код в анонимной функции:Выход из анонимной функции. jQuery

 ... 
     if (fillActyalizerForm(jQuery(this).attr('account_id'), jQuery(this).attr('currency_id')) == false) { 
      return false; 
     } 
     jQuery("#actyalizer").slideToggle("slow"); 
     ... 

Проблема в том, что даже если я возвращаю false, элемент скользит вниз.

function fillActyalizerForm(account_id, currency_id) { 
    formValues = {}; 
     jQuery.ajax({ 
      async: false, 
      type: 'POST', 
      url: "..", 
      data: "{'accountId':" + account_id + ",'currencyId':" + currency_id + "}", 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       if (data && data.hasOwnProperty("d")) { 
        data = data.d; 
       } 
       if (!data.Error) { 
        formValues = data; 
        delete formValues.Error; 
       } else { 
        alert('<%=Resources.app.Actyalizer_AcLoadFail %>'); 
        return false; 
       } 
      }, 
      error: function (data) { 
       alert('<%=Resources.app.Actyalizer_AcLoadFail %>'); 
       return false; 
      } 
     }); 

Так что я успешно получаю предупреждающее сообщение, но он по-прежнему скользит по элементу.

+8

Вы уверены, что добираетесь до возвращения? – mindandmedia

+0

Чтобы узнать о том, что сказал @mindandmedia, проверьте ошибки, вызванные функцией fillActyalizerForm на консоли. –

+0

@ mindandmedia, @ Rory McCrossan, как заставить подфункцию вернуть false? Я попробовал попытку, но он провалился. –

ответ

1

Проблема заключается в том, что функция fillActyalizerForm выполняет асинхронный метод .ajax и затем возвращает без указания возвращаемого значения (значение по умолчанию - false).

Я думаю, что у вас есть два варианта:

  1. переместить jQuery("#actyalizer").slideToggle("slow"); в функцию success.
  2. Выполняйте синхронный запрос ajax.

Я бы порекомендовал вариант один. Это может быть достигнуто путем передачи вашей функции в качестве параметра в fillActyalizerForm или физического перемещения кода.

+0

Я думаю, что плохо wull использовать второй вариант –

+0

@JakeFisher, помните о недостатках при использовании синхронных вызовов AJAX, он блокирует поток пользовательского интерфейса! Изучите это и убедитесь, что это то, чего вы действительно хотите. –

+0

Fourie да, вы были правы в отношении первого варианта. Это было более предпочтительным. –

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