Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   если переменная не определена (https://javascript.ru/forum/dom-window/43416-esli-peremennaya-ne-opredelena.html)

imediasun1 04.12.2013 14:32

если переменная не определена
 
Здравствуйте, при клике на элемент хочу создать переменную соответствующую именно этому элементу но прежде проверить на существование ее, что то не получается на выводе все равно undefined уже после создания переменной
$('.li').click(function(){
var _this=$(this).attr('id');
if ( _this.p==undefined ){
_this.p=0;
alert(_this.p)
}

Soul D Esire 04.12.2013 15:06

Если именно этому элементу, то может лучше и легче будет задать какой-нибудь атрибут данному элементу и уже в него записывать значение?

ksa 04.12.2013 15:07

Цитата:

Сообщение от imediasun1
на выводе все равно undefined

Бивас, тест! (с)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(function (){
	$('li').click(function(){
		var _this=$(this).attr('id');
		if ( _this.p==undefined ){ //Unhandled Error: Cannot convert '_this' to object
			_this.p=0;
			alert(_this.p);
		};
	});
});
</script>
</head>
<body>
<ul>
	<li>test</li>
</ul>
</body>
</html>

Встречный вопрос:
- Где тот вывод undefined?

imediasun1 04.12.2013 15:30

Объясните подробнее он что не принимает _this за объект, и что делать в данном случае чтобы была различная переменная в зависимости от выбранного элемента, приведу код раскрывающегося меню
в котором хочу использовать данную проверку на существование переменной
$('.li').click(function(){
var _this=$(this).attr('id');
if ( _this.p==undefined ){
_this.p=0;
alert(_this.p)
}
if (_this.p==0){

$(this).find('ol').slideDown();
$(this).css('font-weight','bold');
$(this).find('li').css('background','#5f6f91')
$(this).find('li').find('a').css('color','#fff')
$(this).find('ol').css('font-weight','normal');
_this.p=1;
}
else if (_this.p==1){
$(this).find('ol').slideUp();
$(this).css('font-weight','normal');
$(this).css('background','#fff')
$(this).css('color','#000')
_this.p=0;
}
});

ksa 04.12.2013 15:34

Цитата:

Сообщение от imediasun1
Объясните подробнее он что не принимает _this за объект

Так он и не объект... :)

var _this=$(this).attr('id');

Тут _this равен некоему значению атрибута. Причем данное значение можно получить нативным
var _this=this.id;

ksa 04.12.2013 15:43

Цитата:

Сообщение от imediasun1
и что делать в данном случае

- Сделать таки нормальный тестовый пример.
- Нормально объяснить, что нужно получить в итоге...

imediasun1 04.12.2013 17:06

при клике на элемент с классом li он должен открыть список, а при повторном нажатии закрыть, поэтому придумана переменная p которая определяет открыт или закрыт список в данный момент, а привязать к id я хотел для того чтобы соседние списки не раскрывались которые тоже имеют этот же класс

imediasun1 04.12.2013 17:07

видно надо в переменную _this просто сохранить текстовое значение атрибута id, а не объект

imediasun1 04.12.2013 17:18

Цитата:

Сообщение от Soul D Esire (Сообщение 284507)
Если именно этому элементу, то может лучше и легче будет задать какой-нибудь атрибут данному элементу и уже в него записывать значение?

Например

ksa 05.12.2013 08:45

Цитата:

Сообщение от imediasun1
при клике на элемент с классом li он должен открыть список, а при повторном нажатии закрыть, поэтому придумана переменная p которая определяет открыт или закрыт список в данный момент

А про классы ты слышал? :D Все уже придумано до тебя...


Часовой пояс GMT +3, время: 09:40.