2016-04-21 50 views
1

在以下代碼中,如果條件返回false,則三元運算符不會分配值!虛假陳述未由三元運算符執行

<script> 
       function lgn() { 
        document.getElementById('overlay').style.display = 'none' ? 'block':'none'; 
        document.getElementById('lgn').style.display = 'none' ? 'block':'none'; 
       } 
</script> 

其實我試圖讓我在網頁上的覆蓋,以下是嫩枝:

<div class="nvg"> 
       <ul> 
        {% block links %} 
        <li class="n.link"><span class="fa fa-times close" onclick="lgn()"></span></li> 
        {% endblock %} 
       </ul> 
</div> 

{% block overlay %} 
     {{ form_start(form, {'attr':{'id':'lgn'}}) }} 
     <span class="fa fa-times close" onclick="lgn()"></span><br /> 
     <span>Login:</span> 
     {{ form_widget(form.email, {'attr':{'placeholder':'email'}}) }} 
     {{ form_widget(form.pass, {'attr':{'placeholder':'password','class':'pass'}}) }} 
     {{ form_end(form) }} 
{% endblock %} 

請幫助...

+0

' 'none''評估爲'true',所以它永遠不會返回fal SE。 –

回答

1

你的三元沒有意義。

document.getElementById('overlay').style.display = 'none' ? 'block':'none'; 

沒有合乎邏輯的評估,字符串將(大部分)總是被評估爲true。做這樣的事情:

document.getElementById('overlay').style.display = (document.getElementById('overlay').style.display == 'none') ? 'block' : 'none'; 

你最好的解決方案(在清潔方面)是使選擇器變成變量。

function lgn() { 
    element1 = document.getElementById('overlay'); 
    element1.style.display = (element1.style.display == 'none') ? 'block' : 'none'; 

    element2 = document.getElementById('lgn'); 
    element2.style.display = (element2.style.display == 'none') ? 'block' : 'none'; 
} 
3

三元使一個布爾值決定,而你寫你永遠評估爲true:

'none' ? 'block':'none'; 

是基本相同

if ('none' is true) { 
    'block' 
} else { 
    'none'; 
} 

由於none作爲一個字符串是一個真理(在大多數情況下,其結果與布爾真正一樣),你總是選擇三元組中的「真實」路徑。

+0

我喜歡這個答案,我認爲如果你在解釋的基礎上增加了一個解決方案會更好。 – Daniel

1

總是分配display'block'因爲'none'是一個非空,這是總是真正

document.getElementById('overlay').style.display = 'none' ? 'block':'none'; 

此語句

var display = document.getElementById('overlay').style.display 
document.getElementById('overlay').style.display = display == 'none' ? 'block':'none'; 
+0

爲什麼設置'display',然後再使用'document.getElementById('overlay').style.display'? – Daniel

+0

@丹尼爾我使用額外的變量爲更多的可讀性 – isvforall

+0

是的,我明白。但是你可以使用'display'替換第二行中的document.getElementById('overlay')。style.display'。 – Daniel