2016-07-21 3 views
0

Я использую jQuery. Всякий раз, когда вызывается функция menu.tog, он, кажется, забывает, что это за «это» (меню). Я также попытался заменить «this» на «menu» в функции.Невозможно прочитать значение «видимость» неопределенного - 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-стиля над K & скобками R-типа, а не с помощью кронштейнов на условных оба подвержены ошибкам в JavaScript и вообще ** плохая идея ** –

+0

@JaredSmith я ценю но если бы вы могли уточнить, я понятия не имею, о чем вы говорите. – CLASSIFIED

+0

Он означает скобки вокруг 'if'. Я добавил их в свой пример. – eisbehr

ответ

2

Это должно работать:

// 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

Теперь он говорит о недопустимой левой стороне в назначении. Примечание: это говорит об этом независимо от того, использую ли я 'menu' или' this' – CLASSIFIED

+0

Правильно ли ваш 'if'? Похоже, что в вашем коде есть один '='. – eisbehr

+0

Я изменил вопрос, чтобы отразить то, что у меня есть сейчас. – CLASSIFIED

1

Если вам просто нужно переключить видимость, просто сделать это:

$('#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

Я использую видимость, потому что 'hide()', 'show()' и 'toggle()' влияют на значение 'display'. – CLASSIFIED

+0

Только что протестированный код @eisbehr, и он работает для меня –

+0

Я поставил то, что у меня есть в исходном вопросе. Есть ли что-то, что вы могли бы указать? – CLASSIFIED

0

Чтобы правильно расширить использование JQuery JQuery. fn.extend. Затем, когда вы ссылаетесь на это, вы будете ссылаться на правильные объекты.

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

https://jsfiddle.net/gkjhygoa/

+0

Я буду держать это для будущей ссылки, это очень удобно знать. Однако я не буду использовать его в этом случае. – CLASSIFIED

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

  • Нет связанных вопросов^_^