Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.08.2011, 17:07
Аватар для KpyacH
Новичок на форуме
Отправить личное сообщение для KpyacH Посмотреть профиль Найти все сообщения от KpyacH
 
Регистрация: 09.08.2011
Сообщений: 7

передача параметра this
Подскажите, пожалуйста, как правильно сделать.
Есть функция:
function printId(){
alert(this.id); // или alert($(this).id) если так вернее
}

Есть событие:
(function($) {
$(function() {
$('div').mouseover(
//здесь вызов функции printId для этого дива, на который навели мышку
);
});
})(jQuery);

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

Возможно здесь решение через bind(), но я не знаю, как.
Ответить с цитированием
  #2 (permalink)  
Старый 09.08.2011, 17:22
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

$('div').mouseover(function () {
    printId.call(this);
});


А в printId
function printId () { alert(this.id); }


А вообще - это страшный быдлокод

Цитата:
Возможно здесь решение через bind(), но я не знаю, как.
Вообще, я настоятельно рекомендую вам на год забыть слово "JS фреймворк". 2 раза прочитать Флэнагана, разок Ресига, потом Пауэла, написать свой фреймворк, а затем можно снова возвращаться к jQuery (ну или к чему-нибудь другому)) и я вам обещаю: больше вы не зададите таких вопросов)
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 09.08.2011 в 17:34.
Ответить с цитированием
  #3 (permalink)  
Старый 09.08.2011, 17:58
Аватар для KpyacH
Новичок на форуме
Отправить личное сообщение для KpyacH Посмотреть профиль Найти все сообщения от KpyacH
 
Регистрация: 09.08.2011
Сообщений: 7

Спасибо за ответ и за откровенную критику (пока не знаю, чем плох код).

Пока ждал ответа опытным путем нашел еще 2 решения:

(function($) {
    $(function() {
        $('div').mouseover(printId);
    });
})(jQuery);

(function($) {
    $(function() {
        $('div').bind('mouseover', printId);
    });
})(jQuery);

Спасибо за список литературы - она лишней никогда не бывает.
Ответить с цитированием
  #4 (permalink)  
Старый 09.08.2011, 18:13
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
пока не знаю, чем плох код
Ну могу рассказать построчно

(function ($) {
    $(function () {
        $('div').mouseover(
        //здесь вызов функции printId для этого дива, на который навели мышку
        );
    });
})(jQuery);


Строка 1: с какой целью здесь создаётся анонимная функция? Если для без конфликтной работы jQuery, то юзайте noConflict или sub;
Строка 3: $('div') - никогда больше так не делайте) Всегда явно обозначайте свой элемент, а в случае, если их много - делегируйте событие;

Также чувствуется явное не понимание методов jQuery.

ЗЫ: ваше решение более изящное чем моё, но я просто думал, что помимо вызова функции в обработчике, будет ещё действия (кстати this можно было передать, как простой параметр функции).
__________________
kobezzza
code monkey
Ответить с цитированием
  #5 (permalink)  
Старый 09.08.2011, 18:32
Аватар для KpyacH
Новичок на форуме
Отправить личное сообщение для KpyacH Посмотреть профиль Найти все сообщения от KpyacH
 
Регистрация: 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.
Да, тут я сильно плаваю.
Ответить с цитированием
  #6 (permalink)  
Старый 09.08.2011, 18:35
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

$('div[id^="link_pic_menu-"] .links a').mouseover(...);
Ответить с цитированием
  #7 (permalink)  
Старый 09.08.2011, 18:40
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

1) Я на 99% уверен, что вы можете написать просто:
$(function() {
    //тут вызов функций и тп.
});


А событие лучше вешать так (хотя тоже кривоватый вариант, т.к. лучше создать один контейнер для делегирования)

$('div[id^="link_pic_menu-"]').delegate(".links > a", "mouseover", function () { /* тут наш код */ });
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 09.08.2011, 18:42
Аватар для KpyacH
Новичок на форуме
Отправить личное сообщение для KpyacH Посмотреть профиль Найти все сообщения от KpyacH
 
Регистрация: 09.08.2011
Сообщений: 7

Сообщение от devote Посмотреть сообщение
$('div[id^="link_pic_menu-"] .links a').mouseover(...);
Спасибо. Я сначала так и сделал, но скрипт не заработал. Видимо, дело было в другом, а я грешил на выбор элементов.
Ответить с цитированием
  #9 (permalink)  
Старый 09.08.2011, 19:03
Аватар для KpyacH
Новичок на форуме
Отправить личное сообщение для KpyacH Посмотреть профиль Найти все сообщения от KpyacH
 
Регистрация: 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 () { /* тут наш код */ });
Не подскажите, где доступно написано про делегирование?
Ответить с цитированием
  #10 (permalink)  
Старый 09.08.2011, 20:02
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

$('div[id^="link_pic_menu-"]')
- это не лучший вариант. Лучше:
$('div.link_pic_menu')
Читаем про delegate: http://api.jquery.com/delegate/, http://habrahabr.ru/blogs/jquery/86604/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача параметра в функцию DmitryT Элементы интерфейса 11 19.03.2011 14:02
Передача параметра Лимонадный Джо Общие вопросы Javascript 8 25.01.2011 22:19
Передача объекта как параметра функции Fenec jQuery 3 05.01.2011 18:22
Передача параметра содержащего кавычки Polar Wolf Общие вопросы Javascript 1 02.09.2009 15:16
Передача параметра из checkbox в asp страницу artwalek AJAX и COMET 3 11.08.2009 14:24