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