 
			
				09.08.2011, 17:07
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				передача параметра this
			 
			
		
		
		
		Подскажите, пожалуйста, как правильно сделать. 
Есть функция: 
function printId(){ 
alert(this.id); // или alert($(this).id) если так вернее 
} 
 
Есть событие: 
(function($) { 
    $(function() { 
        $('div').mouseover( 
            //здесь вызов функции printId для этого дива, на который навели мышку 
        ); 
    }); 
})(jQuery); 
 
Вопрос наверно больше в том, как передать в эту функцию полученный объект div, чтоб она с ним работала через this. 
 
Возможно здесь решение через bind(), но я не знаю, как. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 17:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Быдлокодер;) 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.11.2010 
					
					
					
						Сообщений: 4,338
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
$('div').mouseover(function () {
    printId.call(this);
});
А в  printId
function printId () { alert(this.id); }
А вообще - это страшный быдлокод  
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		Возможно здесь решение через bind(), но я не знаю, как.
	 | 
 
	
 
 Вообще, я настоятельно рекомендую вам на год забыть слово "JS фреймворк". 2 раза прочитать Флэнагана, разок Ресига, потом Пауэла, написать свой фреймворк, а затем можно снова возвращаться к jQuery (ну или к чему-нибудь другому)) и я вам обещаю: больше вы не зададите таких вопросов)  
		
	
		
		
		
		
		
			
		
		
		
		
		
						  
				
				Последний раз редактировалось kobezzza, 09.08.2011 в 17:34.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 17:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Спасибо за ответ и за откровенную критику (пока не знаю, чем плох код). 
Пока ждал ответа опытным путем нашел еще 2 решения:
 
(function($) {
    $(function() {
        $('div').mouseover(printId);
    });
})(jQuery);
(function($) {
    $(function() {
        $('div').bind('mouseover', printId);
    });
})(jQuery);
Спасибо за список литературы - она лишней никогда не бывает.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 18:13
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Быдлокодер;) 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.11.2010 
					
					
					
						Сообщений: 4,338
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		пока не знаю, чем плох код
	 | 
 
	
 
 Ну могу рассказать построчно   
(function ($) {
    $(function () {
        $('div').mouseover(
        //здесь вызов функции printId для этого дива, на который навели мышку
        );
    });
})(jQuery);
Строка 1: с какой целью здесь создаётся анонимная функция? Если для без конфликтной работы jQuery, то юзайте noConflict или sub; 
Строка 3: $('div') - никогда больше так не делайте) Всегда явно обозначайте свой элемент, а в случае, если их много - делегируйте событие;
 
Также чувствуется явное не понимание методов jQuery.
 
ЗЫ: ваше решение более изящное чем моё, но я просто думал, что помимо вызова функции в обработчике, будет ещё действия (кстати this можно было передать, как простой параметр функции  ).  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 18:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от kobezzza
			 
		
	 | 
 
	| 
		Строка 1: с какой целью здесь создаётся анонимная функция? Если для без конфликтной работы jQuery, то юзайте noConflict или sub;
	 | 
 
	
 
 Честно говоря я не знаю. Просто я взял уже существующий файл .js и позаменял там функции на свои. Я пришел к выводу, что в следующей конструкции (в таком виде оно используется у меня) функции работают, а как и почему - осталось неизведанным.
 
jQuery.noConflict();
(function($) {
	$(function() {
		//тут вызов функций и тп.
	});
})(jQuery);
	
 
	
		
			Сообщение от kobezzza
			 
		
	 | 
 
	| 
		Строка 3: $('div') - никогда больше так не делайте) Всегда явно обозначайте свой элемент, а в случае, если их много - делегируйте событие;
	 | 
 
	
 
 Это упрощение, чтоб не отвлекать внимание на выбор элемнтов. На практике стоит:
 
$('div[id^="link_pic_menu-"]').children('.links').children('a').mouseover(...);
(Оно и так работает, но если подскажите, как упростить, буду премного благодарен)
 
	
 
	
		
			Сообщение от kobezzza
			 
		
	 | 
 
	| 
		Также чувствуется явное не понимание методов jQuery.
	 | 
 
	
 
 Да, тут я сильно плаваю.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 18:35
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
$('div[id^="link_pic_menu-"] .links a').mouseover(...);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 18:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Быдлокодер;) 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.11.2010 
					
					
					
						Сообщений: 4,338
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		1) Я на 99% уверен, что вы можете написать просто: 
$(function() {
    //тут вызов функций и тп.
});
А событие лучше вешать так (хотя тоже кривоватый вариант, т.к. лучше создать один контейнер для делегирования)
 
$('div[id^="link_pic_menu-"]').delegate(".links > a", "mouseover", function () { /* тут наш код */ });
 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 18:42
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от devote
			 
		
	 | 
 
	
		
$('div[id^="link_pic_menu-"] .links a').mouseover(...);
	 | 
 
	
 
 Спасибо. Я сначала так и сделал, но скрипт не заработал. Видимо, дело было в другом, а я грешил на выбор элементов.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.08.2011, 19:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от kobezzza
			 
		
	 | 
 
	
		1) Я на 99% уверен, что вы можете написать просто: 
$(function() {
    //тут вызов функций и тп.
});
	 | 
 
	
 
 Я тут, как мартышка и очки... То ли не работает, как вы говорите, то ли я неправильно совет использую. У меня всего-то ничего 3 элемента: 
1) объявление переменной (судя по всему это можно в любом месте делать) 
2) описание собственной функции 
3) вызов ее для определенных блоков ($('div[id^="link_pic_menu-"]')...)
 
	
 
	
		
			Сообщение от kobezzza
			 
		
	 | 
 
	
		А событие лучше вешать так (хотя тоже кривоватый вариант, т.к. лучше создать один контейнер для делегирования) 
 
$('div[id^="link_pic_menu-"]').delegate(".links > a", "mouseover", function () { /* тут наш код */ });
	 | 
 
	
 
 Не подскажите, где доступно написано про делегирование?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
 
 |  
  |