Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ни-чего не-по-ни-ма-ю :((( (https://javascript.ru/forum/jquery/37126-ni-chego-ne-po-ni-ma-yu.html)

зверек 08.04.2013 17:20

ни-чего не-по-ни-ма-ю :(((
 
почему не работает конструкция:
<script type='text/javascript' src='/js/jquery/jquery-1.6.1.min.js'></script>
<script type="text/javascript">

function ChangeList(id)
{
	$(id).hide();
	$('seen_2').show();	
}

</script>


<img id="seen_1" onclick="ChangeList(this)"  src="/images/seen1.png">
<img id="seen_2"  style="display:none" src="/images/seen2">


точнее, скрывается, но ничего не показывается

tsigel 08.04.2013 17:21

Цитата:

Сообщение от зверек
$('seen_2').show();

$('.seen_2').show();

зверек 08.04.2013 17:24

я тупец!!! забыл # :(((

зверек 08.04.2013 17:32

А кстати, объясните, плиз, почему в данном примере нельзя сделать так

<script type="text/javascript">

function ChangeList()
{
	$(this).hide();		
}

</script>

<img id="seen_1"  src="/images/new_icons/seen_yes.png" 	onclick="ChangeList()"  />


не работает.

как вообще правильно будет сделать?

9xakep 08.04.2013 17:38

зверек,

<script type="text/javascript">

function ChangeList(elem)
{
	$(elem).hide();		
}

</script>


<img id="seen_1"  src="/images/new_icons/seen_yes.png"   onclick="ChangeList(this)"  />

зверек 08.04.2013 17:58

9xakep,

спасибо!

danik.js 09.04.2013 00:30

Цитата:

Сообщение от зверек
как вообще правильно будет сделать?

Правильно навешивать обработчики через js.
$('#seen_1').on('click', changeList);


Кстати this можно так передать:
<img id="seen_1" src="/images/new_icons/seen_yes.png" onclick="ChangeList.call(this)" />

зверек 09.04.2013 11:38

Цитата:

Сообщение от danik.js (Сообщение 244929)
Правильно навешивать обработчики через js.
$('#seen_1').on('click', changeList);

А если id динамический?

tsigel 09.04.2013 11:47

Цитата:

Сообщение от зверек
А если id динамический?

Есть классы.. Никто не мешает навешивать обработчики через js к динамическому id.

danik.js 09.04.2013 11:51

Вообще-то id и используется либо для якорной навигации либо для привязки к JS. Для css используют классы.

irezvov 09.04.2013 13:50

danik.js,
нет никаких оснований использовать id в жс, классы и для этого подходят весьма неплохо

wc3banderlog 09.04.2013 14:56

указывая this в функции, вы ссылаетесь на объект, которому она принадлежит. В вашем случае на объект window.

Если функция будет задана как someObj.lol = function(){console.log(this)}, то вы получите указатель на объект someObj

зверек 09.04.2013 16:10

ну вот пример.
есть каталог фильмов. Выводится по 50 штук названий на странице.
под каждым названием ряд функциональных иконок, кликая на которые юзер определяет для себя статус фильма (посмотрел, хочу посмотреть, смотрю в данный момент и пр.).
Каждая иконка имеет две ипостати (включена, отключена). А еще каждая иконка разумеется привязана к id данного фильма.
Итого id каждой иконки = статус_ипостась_id

функция ChangeList() парсит этот id и производит необходимые действия.
Если такая запись не оптимальна
<img id="статус_ипостась_id "  src="/images/img.png"   onclick="ChangeList(this)"  />

то какая будет лучше?

wc3banderlog 09.04.2013 16:56

А лучше будет такая. ЗАведите класс для этих изображений, например, .change-list. Удалите обработчик события onclick в теге и создайте обработчик на основе jquery. Например:

$(".change-list").live("click", function(){
var id = $(this).attr("id")
})

И внутри осуществляете необходимые действия

$(this) внутри обработчика будет указывать на элемент, на котором сработало событие.

wc3banderlog 09.04.2013 17:04

В идеале, var this = $(this)

Тогда будет храниться объект и не будет происходить поиск в DOM при каждом вызове

зверек 09.04.2013 18:25

wc3banderlog,

сделал по вашему методу.
Вышла ошибка TypeError: $(...).attr(...) is undefined
:(

danik.js 10.04.2013 02:25

Цитата:

Сообщение от wc3banderlog
var id = $(this).attr("id")

Во народ пошел. Без jQuery даже свойство объекта не может получить :haha:
var id = this.id;


wc3banderlog 10.04.2013 08:00

Цитата:

Сообщение от зверек (Сообщение 245123)
wc3banderlog,

сделал по вашему методу.
Вышла ошибка TypeError: $(...).attr(...) is undefined
:(

Приведите полный пример кода, который вы используете


danik.js, и так можно тоже. Или вот так, this.getAttribute('id').

зверек 10.04.2013 09:44

wc3banderlog,

<script type='text/javascript' src='/js/jquery/jquery-1.6.1.min.js'></script>
<script type="text/javascript">
$(function(){

$(".icons").click(function(){
	var arr = $(this).attr('id').split('_');            
})

})
</script>


<div class="icons">
<img id="seen_1"  src="/images/new_icons/seen_yes.png"  />
</div>

wc3banderlog 10.04.2013 09:48

Вы делаете обработчик на div. Следовательно $(this) внутри обработчика будет ссылаться на сам див.
Чтобы обработать ваш id, нужно сначала найти этот элемент.

Например так, var arr = $(this).find("img").attr('id').split('_');

зверек 10.04.2013 09:58

ага, тоже сам допер уже.

вот такой вариант вполне работает

$(".icons img").click(function()

Спасибо большое!!!

wc3banderlog 10.04.2013 10:01

Либо так =)


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