2012-01-02 5 views
1

После завершения разбора JSON в указанных пролетных тег, которые я хотел, чтобы автоматически скрывать императорские теги currentimperial и forecastimperial, но когда я пытаюсь сделать это использованиеJQuery .hide() не скрывает элемент

$('#currentimperial').hide(); 

$('#forecastimperial').hide(); 

и просмотреть результат в хроме и посмотреть в консоли я вижу, что вместо

style="display: none; " 

они на самом деле имеют

style="display: inline; " 

Вот мой весь javascript и html на jsBin http://jsbin.com/efaguv/edit#javascript,html

Спасибо за любую помощь, которую я получаю.

+0

Можете ли вы показать соответствующие JS и html в своем вопросе? У вашей jsbin-ссылки, похоже, есть только jsbin jsbin «hello world» html, а не ваш html. – nnnnnn

ответ

4

Я думаю, что проблема в том, что вы не учли тот факт, что ваш вызов Ajax является асинхронной.

Значительно упрощенный пример того, что происходит:

1 jQuery(document).ready(function($) { 
2 $('#warning').remove('#warning'); 
3 $.ajax({ 
4  url: 'http://api.wunderground.com/api/APIKEYREMOVED/geolookup/conditions/forecast/q/51.773079,-1.591353.json', 
5  dataType: "jsonp", 
6  success: function(parsed_json) { 
7   $('#currentimperial').fadeIn(1000).append(+temp_f+ '℉ '); 
8  } 
9 }); 
10 
11 $('#celcius').hide(); 
12 $('#currentimperial').hide(); 
13 $('#forecastimperial').hide(); 
14 }); 
  • линия 2 выполняет
  • линия 3 выполняет сделать запрос AJAX (ответ будет получен в какой-то момент в будущем)
  • строки 11-13 выполнить, чтобы скрыть пункты
  • линия 14: функция готовности документа завершена
  • (в конечном счете) a jax-ответ, и обработчик успеха называется так, что выполняется строка 7.

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

Можете ли вы вместо этого скрывать элементы в этом обратном вызове ajax?

+0

Спасибо, что указали, что .fadeIn() заставляло их снова становиться видимыми, я изменил .fadeIn() на .hide() для имперских интервалов, и он работает так, как я хотел сейчас, еще раз спасибо. –

1

Вы можете использовать

$('#currentimperial').slideUp(); 

или

document.getElementById('currentimperial').style.display="none"; 
+6

Я думаю, что это '.slideUp()', а не '.slideUP'. И с Javascript '.getElementById()' принимает только 'id', а не' # id'. – ThinkingStiff

1

У меня была аналогичная проблема, когда скрыть не скрывалось. Я использую угловое и обнаружил, что директива использует функцию css !important в атрибуте стиля display, заставляя его оставаться блоком и препятствуя экранированию отображения на экране.

elem.attr('style', 'display: none !important;');