| 
	| 
	
	| 
		
	| 
			
			 
			
				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 () { /* тут наш код */ });
 |  
	
 Не подскажите, где доступно написано про делегирование? |  |  |  |