2015-12-29 3 views
0

Я искал StackOverflow, но никаких вопросов не соответствовала моей конкретной дилемме. У меня есть DIV с классом обув, который устанавливается с помощью CSS для дисплей: встроенный блок.Если условие не влияет на отображение div

Я хотел Foo, чтобы быть видимым, когда переменная температура является числом или строкой, но не показывать когда это не является числом или строкой.

var temp; 
     if (temp !== undefined || temp !== null) { 
      temp = temp/1000; 
      temp = temp + 'K'; 
      $('.foo').css("display", "inline-block"); 
     } 
     else { 
      $('.foo').css("display", "none"); 
     } 

Когда я запускаю этот код, «foo» вообще не отображается.

, когда я изменить код для

var temp; 
     if (temp != undefined || temp != null) { 
      temp = temp/1000; 
      temp = temp + 'K'; 
      $('.foo').css("display", "inline-block"); 
     } 
     if (temp == undefined || temp == NaN) { 
      $('.foo').css("display", "none"); 
     } 

Foo еще весь набор дисплей: "NONE"

Я выбежала console.log на каждом если, а также когда temp представляет собой значение, это пройти через первуюесли и когда это NaN или нуль это пройти через второй если. Но почему ТОЛЬКОдисплей: «нет» надейся?

Заранее спасибо. - В.С.

РЕДАКТИРОВАТЬ Измененный код первой, если в первом кодовом блоке

В clarif, темп постоянно сбрасывается на новое значение выше этого, если с помощью функции .get:

var temp =this.model.get('custitem_temp'); 

, и это значение успешно устанавливается несколько раз. НЕКОТОРЫХ моей консоли для справки:

temp is set using .get: 80000 
temp inside FIRST IF: 80000 
temp is set using .get: undefined 
temp inside FIRST IF: undefined 
temp is set using .get: undefined 
temp inside FIRST IF: undefined 
temp is set using .get: 80000 
temp inside FIRST IF: 80000 
temp is set using .get: undefined 
temp inside FIRST IF: undefined 
temp is set using .get: 80000 
temp inside FIRST IF: 80000 
temp is set using .get: undefined 

...

и так далее.

EDIT02:

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

  if (temp === undefined || temp === null) { 
      console.log("temp (should be undefined): " + temp) 
      console.log("inside IF");; 
      $('.foo').css("display", "none"); 
     } 
     else { 
      console.log("temp (should be a value): " + temp) 
      console.log("inside ELSE: " + temp);  
      temp = temp/1000; 
      temp = temp + 'K'; 
      $('.foo').css("display", "inline-block"); 
      console.log("after ELSE: " + temp); 
     } 

и консольных отражает:

temp (should be a value): 80000 
inside ELSE: 80000 
after ELSE: 80K 
temp (should be undefined): undefined 
inside IF 
temp (should be undefined): undefined 
inside IF 
temp (should be a value): 80000 
inside ELSE: 80000 
after ELSE: 80K 
... 

Тем не менее, я до сих пор получаю дисплей: нет; на обув

EDIT 03:

Я добавил console.log для вывода значения дисплея:

  if (temp === undefined || temp === null) { 
      console.log("temp (should be undefined): " + temp) 
      console.log("inside IF"); 
      $('.foo').css("display", "none"); 
      console.log("display value: " + $('.foo').css('display')); 
     } 
     else { 
      console.log("temp (should be a value): " + temp) 
      console.log("inside ELSE: " + temp);  
      temp = temp/1000; 
      temp = temp + 'K'; 
      $('.foo').css("display", "inline-block"); 
      console.log("after ELSE: " + temp); 
      console.log("display value: " + $('.foo').css('display')); 
     } 

Мой журнал консоли дает некоторую интересную информацию: начинается, как и раньше, за исключением того, говоря, что значение дисплея неопределенные

temp (should be a value): 80000 
inside ELSE: 80000 
after ELSE: 80K 
display value: undefined 
temp (should be undefined): undefined 
inside IF 
display value: undefined 
temp (should be undefined): undefined 
inside IF 

, но затем после примерно 9 циклов она начинает присвоения значения дисплея:

temp (should be a value): 80000 
inside ELSE: 80000 
after ELSE: 80K 
display value: undefined 
temp (should be undefined): undefined 
inside IF 
display value: none 
temp (should be undefined): undefined 
inside IF 
display value: none 
temp (should be a value): 80000 
inside ELSE: 80000 
after ELSE: 80K 
display value: block 
temp (should be undefined): undefined 
inside IF 
display value: none 

Любые объяснения?

+2

где вы назначаете значение 'temp'? –

+1

Связано ли это с функцией '.ready()'? –

+1

'var temp;' устанавливает значение 'temp' как' null'. (если вы не назначили значение в промежутке). –

ответ

2

Вы проверили консоль? Ваш второй синтаксис if неверен. Это должно быть, как это

if (tempMileageWarranty == undefined || tempMileageWarranty == NaN)' 

Copy Paste ошибки в сторону ...

.foo становится установлен display: none;, потому что temp не определена ..

Код var temp; собирается сделать temp неопределенным, (передавая ваш второй if), потому что ему никогда не присваивается значение.

Это может быть какой-то полезно прочитать: JavaScript checking for null vs. undefined and difference between == and ===

+0

Извините за синтаксис, при копировании и редактировании я перепутал второй, если. Я отредактировал его правильно. Я проверяю консоль. когда «temp» имеет значение, оно проходит через мое первое, если и тогда, когда оно не определено, оно проходит через второе if. Но без учета темпа, имеющего ценность, он все еще не отображается. –

+1

Я не уверен, почему вы запутались тогда, он получает значение 'display: none ', потому что он не определен. –

+0

Но когда он определен, он все равно устанавливает его для отображения: none ... это оценивается каждый раз, когда temp устанавливается на новое значение через метод .get –

0
t = typeof(temp); 
if(t == "undefined") 
{ 
    console.log(temp +": do not display"); 
} 
else if(t == 'number' || t == 'string') { 
    console.log(temp +": It is "+t+".So display the foo"); 
} 

Попробуйте этот код. Я проверил его с 3 значением temp.80000, «Foo», undefined и результатом, который я получил в консоли, является вот так.

80000: It is number.So display the foo 
foo: It is string.So display the foo 
undefined: do not display 

Надеюсь, это поможет вам.

+0

Спасибо ... поэтому я реализовал то, что вы сказали, и я получаю тот же результат, весь дисплей: none: Некоторые из моих журналов консоли: ++ 80000: Это номер. Таким образом, отображение Foo/ темп (должно быть значение): 80000/ внутри ELSE: 80000/ после ELSE: 80K/ отображаемое значение: не определено/ неопределенными: не отображать/ темп (должно быть определено): не определено/ внутри IF/ отображаемое значение: undefined/ undefined: не отображается/ ++ вы можете видеть, что значение css дисплея отображается «undefined». Это часть, которую я не получаю. –

+0

Вы создаете div динамически? – Maddy

+0

Нет div уже существует в разметке. –

0

Быстрое примечание. Хотел узнать, заметили ли вы здесь двойную точку с запятой.

console.log("inside IF");; 

Также я бы просто сделал быструю и простую проверку в определенном состоянии, если temp и убедитесь, что он не является нулевым.

if (temp && temp !== null) { 
     console.log("temp (should be a value): " + temp) 
     console.log("inside ELSE: " + temp);  
     temp = temp/1000; 
     temp = temp + 'K'; 
     $('.foo').css("display", "inline-block"); 
     console.log("after ELSE: " + temp); 
} else { 
     console.log("temp (should be undefined): " + temp) 
     console.log("inside IF"); 
     $('.foo').css("display", "none"); 
    } 
+0

Я заметил двойную точку с запятой после того, как я разместил ее. Я исправил это, и это ничего не исправить. Если вы посмотрите мое последнее редактирование OP, то я проверяю (и консольное ведение журнала) состояние отображения foo ... оно начинается как неопределенное, а затем примерно через 9 итераций оно получает состояние (block/none) –

+0

вместо Функции jQuery css выполняют функцию show() hide(). Они достигнут такого же эффекта, но могут лучше подойти к тому, что вы пытаетесь сделать. msgstr "показать для встроенного блока и скрыть его". –

+0

может быть полезно посмотреть, как выглядит HTML. –

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