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)

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('_');


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