2011-01-25 1 views
-1

Я уверен, что решение явно очевидно, но я потратил час на это, так что очень ценю любую помощь!Простой Javascript, если проблема с оператором

Следующая Javascript предназначен, чтобы сделать DIV visiable и другой DIV невидим, если переменная LoggedIn = "истина":

/* Javascript */ 

function showArticle() 
{ 
document.getElementById('full').style.display = 'block'; 
document.getElementById('summary').style.display = 'none'; 
} 
var loggedin="true"; 
var owned="true"; 
if (loggedin="true") 
{ 
document.write("Logged In"); 
} 
if (owned="true") 
{ 
    showArticle(); 
} 

.

<!-- HTML --> 
<div id="summary">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div> 

<div id="full" style="display:none;">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur. 
<div> 

Я правильно понял, что проблема связана с моим вызовом функции showArticle?

+7

Вы * в * Помните, что любой человек с минимальными техническими знаниями, сможет увидеть articlewithout быть авторизовано? –

+1

Если это JavaScript, почему были помечены тегами [php], [mysql], [project-planning] и [спецификациями] ...? – BoltClock

+0

Виктор, я знаю - эта система является просто доказательством концепции/прототипа, демонстрирующей функциональность :) – Jamie

ответ

2

Я скопировал свой код в текстовый файл и попробовал - и это была проблема.

Я положил javascript в теги скрипта над html.

<html> 
<body> 

<script> 
function showArticle() 
{ 
document.getElementById('full').style.display = 'block'; 
document.getElementById('summary').style.display = 'none'; 
} 
var loggedin="true"; 
var owned="true"; 
if (loggedin="true") 
{ 
document.write("Logged In"); 
} 
if (owned="true") 
{ 
    showArticle(); 
} 

</script> 

<!-- HTML --> 
<div id="summary">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div> 

<div id="full" style="display:none;">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur. 
<div> 


</body> 
</html> 

Это терпит неудачу, потому что, когда Javascript работает теги DIV не были добавлены к DOM, поэтому getElementById возвращает нуль. Я нашел это, используя отладку javascript в Firebug/Firefox.

Если я переместил javascript после html, он работает - поскольку DOM затем загружается с этими элементами.

<html> 
<body> 
<!-- HTML --> 
<div id="summary">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div> 

<div id="full" style="display:none;">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur. 
<div> 

<script> 
function showArticle() 
{ 
document.getElementById('full').style.display = 'block'; 
document.getElementById('summary').style.display = 'none'; 
} 
var loggedin="true"; 
var owned="true"; 
if (loggedin="true") 
{ 
document.write("Logged In"); 
} 
if (owned="true") 
{ 
    showArticle(); 
} 

</script> 
</body> 
</html> 
+0

Awesome Chris! Это был трюк. Имеет смысл в ретроспективе – Jamie

+0

Нет проблем - удачи в следующей задаче :) –

8

изменение = в ==, посмотрите на этой article (оператор яваскрипт)

if (loggedin=="true") 
..... 
if (owned=="true") 
+0

Использование '=' интерпретируется как оператор присваивания и присваивает переменную значение внутри предложения if и оценивает ее значение как логическое. Если вы назначаете «true», то if всегда будет работать. – Neil

3

Это должно быть if (a == b) и не if (a = b): последний присваивает значение b к переменным a (а затем использует значение b чтобы определить, следует ли запускать условие if, которое в вашем примере всегда имеет место).

0

вместо LoggedIn = "истинной" пишут как LoggedIn == "истинной"

0

его действительно новичок, чтобы скрыть его содержимое с помощью JavaScript. Но если вы хотите сделать это в любом случае, я бы рекомендовал удалить контент.

использование

document.getElementById('summary').innerHTML = ''; 

вместо

document.getElementById('summary').style.display = 'none'; 
2
function showArticle() 
{ 
    document.getElementById('full').style.display = 'block'; 
    document.getElementById('summary').style.display = 'none'; 
} 
var loggedin = true; 
var owned = true; 
if (loggedin == true) 
{ 
    alert("Logged In"); 
} 
if (owned == true) 
{ 
    showArticle(); 
} 
+0

Спасибо за это Mattcha, но это if (принадлежит == true) {showArticle()} *, который все еще не работает. (т. е. если я помещаю document.write, он делает это, как и ожидалось, однако функция showArticle не работает.) – Jamie

2

Работал для меня (UPD):

<html> 
<head> 

<script type="text/javascript"> 
window.onload = function() { 
    function showArticle() 
    { 
     document.getElementById('full').style.display = 'block'; 
     document.getElementById('summary').style.display = 'none'; 
    } 

    var loggedin = true, owned = true; 

    if (loggedin == true) 
    { 
     document.write("Logged In"); 
    } 

    if (owned == true) 
    { 
     showArticle(); 
    } 
} 
</script> 
</head> 

<body> 
<!-- HTML --> 
<div id="summary">moo</div> 
<div id="full" style="display:none;">foo</div> 

</body> 
</html> 

Итак, что было не так?

  • незакрытый <div> (вторая)
  • присвоения вместо сравнительных (= вместо ==)
  • строки вместо булевых ("true" против true)
  • сценария не имел типа (вы должны всегда устанавливать это только стандарт: <script type="text/javascript">)
  • скрипты должны быть в пределах <head> теги (это также стандарт)
  • вы пытаетесь получить доступ к объектам, когда они еще не были загружены
Смежные вопросы