2016-07-21 5 views
0

Ich benutze jQuery. Immer wenn die Funktion menu.tog aufgerufen wird, scheint es zu vergessen, was "dieses" (Menü) ist. Ich habe auch versucht, "das" durch "Menü" in der Funktion zu ersetzen.Kann den Wert 'Sichtbarkeit' von undefined nicht lesen - J

var usn = $("#userstuff"); 
var menu = $('#userinfo'); 

menu.height('0px'); 

menu.tog=function() 
{ 
if (menu.css('visibility','hidden')=='hidden') 
    menu.css('visibility','visible'); 
else 
    menu.css('visibility','hidden'); 
} 
+0

FWIW GNU-Stil Klammern über K & R-Stil Klammern und nicht sind Klammern auf conditionals Verwendung sowohl fehleranfällig in JavaScript und in der Regel eine schlechte Idee ** ** –

+0

@JaredSmith ich das zu schätzen wissen Rat, aber wenn Sie es ausarbeiten könnten, ich habe keine Ahnung, wovon Sie reden. – CLASSIFIED

+0

Er meint die Klammern um das 'if'. Ich habe sie in meinem Beispiel hinzugefügt. – eisbehr

Antwort

2

Dies sollte funktionieren:

// only use 'menu', not '$(menu)' and don't write 'px' 
// or in one row: var menu = $('#userinfo').height(0); 
var menu = $('#userinfo'); 
menu.height(0); 

// however your `tog` function is called, there may be not referenced 
// to 'this', instead use 'menu' 
// but keep in mind, 'menu' is a jQuery object here, not a DOM element 
menu.tog = function() { 
    if (menu.css("visibility") == "hidden") { 
     menu.css("visibility", "visible"); 
    } 
    else { 
     menu.css("visibility", "hidden"); 
    } 

    // or in one line too: 
    // menu.css("visibility", menu.css("visibility") == "hidden" ? "visible" : "hidden"); 
}; 

menu.tog(); 
+0

Jetzt heißt es ungültige Zuweisung in der linken Seite. Hinweis: es sagt dies unabhängig davon, ob ich 'Menü' oder' this' verwende. – CLASSIFIED

+0

Ist dein 'if' korrekt? Klingt so, als hättest du in deinem Code ein einziges '='. – eisbehr

+0

Ich habe die Frage geändert, um zu reflektieren, was ich jetzt habe. – CLASSIFIED

1

Wenn Sie nur die Sichtbarkeit umschalten müssen, dies nur tun:

$('#toggle').click(function() { 
 
    $('#test').toggle(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span id="test">TOGGLE ME</span> 
 
</br> 
 
<button id="toggle">CLICK TO TOGGLE</button>

+1

Ich verwende Sichtbarkeit, weil 'hide()', 'show()' und 'toggle()' den 'display' Wert beeinflussen. – CLASSIFIED

+0

Nur getestet @eisbehr Code und es funktioniert für mich –

+0

Ich habe was ich habe in der ursprünglichen Frage gestellt. Gibt es etwas, auf das Sie hinweisen könnten? – CLASSIFIED

0

richtig jQuery jQuery zu verlängern. fn.extend. Wenn Sie darauf verweisen, verweisen Sie auf die korrekten Objekte.

jQuery.fn.extend({ 
    tog: function() { 
     return this.each(function() { 
      this.style.visibility = this.style.visibility == 'hidden' ? 'visible':'hidden'; 
     }); 
    } 
    }); 

https://jsfiddle.net/gkjhygoa/

+0

Ich werde dies für zukünftige Referenz halten, es ist wirklich nett zu wissen. Allerdings werde ich es in diesem Fall nicht verwenden. – CLASSIFIED

Verwandte Themen