2012-07-04 2 views
-2
function init(){ 
    var flag=true; 
    if(flag) 
    { 
     document.getElementById("panel").innerHTML= 
      "power is on<br />"; 
    } 
    if(7<2) 
    { 
     document.getElementById("panel").innerHTML= 
      "<br />failure"; 
    } 
     if(2<7) 
    { 
     document.getElementById("panel").innerHTML= 
      "<br />success"; 
    } 
} 
window.onload=init; 

это if.js, я загружаю его в другой html-файл, но это основной код, который запускается.Выход javascript исчезает

Единственный выход, который я получаю, является «успехом», но «власть включена» не показывает, что не так?

+0

Ваш второй вызов 'document.getElementById (« panel »). InnerHTML =' заменяет содержимое первого. –

ответ

0
var panel = document.getElementById("panel"); 
    if(flag) { 
     panel.innerHTML += "power is on<br />"; 
    } 

    if(7<2) { 
     panel.innerHTML += "<br />failure"; 
    } 
    if(2<7) { 
     panel.innerHTML += "<br />success"; 
    } 

каждый раз, когда вы меняете innerHTML вы перезаписать все предыдущее содержимое, так что вы должны добавить строку с +=.

Возможно, вы захотите также создать ссылку на элемент панели только один раз.

Пример скрипка: http://jsfiddle.net/ypznU/

+0

Пожалуйста, может ли downvoter объяснить -1? – fcalderan

+0

'+ = innerHTML', нужно сказать больше? – Esailija

+1

@Esailija да: что с этим не так? :) Надеюсь, это не связано с вопросом микро-оптимизации при добавлении двух строк (даже если вы абсолютно правы на этом). – fcalderan

0

Вы заменяете текущий HTML там, вы должны использовать + = вместо =.

function init(){ 
var flag=true; 
if(flag) 
{ 
    document.getElementById("panel").innerHTML += 
     "power is on<br />"; 
} 
if(7<2) 
{ 
    document.getElementById("panel").innerHTML += 
     "<br />failure"; 
} 
    if(2<7) 
{ 
    document.getElementById("panel").innerHTML += 
     "<br />success"; 
} 

Как это работает на вас?

+0

+1 Я хочу знать, почему этот ответ занижен? –

+2

Я думаю, что вы были заблокированы пользователем, который правильно указал, что строки должны вычисляться один раз перед добавлением их через innerHTML.Во всяком случае, в этом конкретном случае я думаю, что более важно показать и объяснить пользователю, почему предыдущие строки были удалены, поэтому +1 для меня – fcalderan

+0

Да, возможно, поэтому я был заблокирован, и они были правы, лучше построить строку, а затем назначьте ее за один раз. Но это показало, почему ваш текст не появился, как вы ожидали в любом случае. –

0

Установка innerHTML элемента заменяет любым содержимым, имевшимся ранее с данной строкой HTML. Итак, что происходит, так это то, что «власть в состоянии» видна на мгновение (в наши дни компьютеры очень быстрые), а затем сразу же заменяется «успехом».

2

Не назначайте innerHTML в нескольких местах, создайте строку и назначьте ее сразу.

var flag = true, 
    html = ""; 
if (flag) { 
    html += "power is on<br />"; 
} 
if (7 < 2) { 
    html += "<br />failure"; 
} 
if (2 < 7) { 
    html += "<br />success"; 
} 
document.getElementById("panel").innerHTML = html; 
0

Вы можете использовать еще, если вместо того, чтобы, если

function init(){ 
    var flag=true; 
    if(flag) 
    { 
     document.getElementById("panel").innerHTML= 
      "power is on<br />"; 
    } 
    else if(7<2) 
    { 
     document.getElementById("panel").innerHTML= 
      "<br />failure"; 
    } 
     else if(2<7) 
    { 
     document.getElementById("panel").innerHTML= 
      "<br />success"; 
    } 
} 
window.onload=init; 

Пожалуйста, обратите внимание выше код всегда показывать «власть на», потому что в вашем методе вы назначаете флаг как истинный, если вы хотите несколько выходных вы можете используйте метод конкатенации, как и другие.

0

Последний оператор if всегда будет оценивать значение true.

if(2<7) 
{ 
    document.getElementById("panel").innerHTML= 
     "<br />success"; 
} 

Это означает, что «успех» всегда будет заменять все, что находится внутри элемента панели. Убедитесь, что ваш условный код действительно то, что вы хотите, и что замена действительно то, что вы намеревались. В противном случае добавьте строку, как предложили другие.