передача параметра this
Подскажите, пожалуйста, как правильно сделать.
Есть функция: function printId(){ alert(this.id); // или alert($(this).id) если так вернее } Есть событие: (function($) { $(function() { $('div').mouseover( //здесь вызов функции printId для этого дива, на который навели мышку ); }); })(jQuery); Вопрос наверно больше в том, как передать в эту функцию полученный объект div, чтоб она с ним работала через this. Возможно здесь решение через bind(), но я не знаю, как. |
$('div').mouseover(function () {
printId.call(this);
});
А в printId function printId () { alert(this.id); }
А вообще - это страшный быдлокод:D Цитата:
|
Спасибо за ответ и за откровенную критику (пока не знаю, чем плох код).
Пока ждал ответа опытным путем нашел еще 2 решения: (function($) {
$(function() {
$('div').mouseover(printId);
});
})(jQuery);
(function($) {
$(function() {
$('div').bind('mouseover', printId);
});
})(jQuery);
Спасибо за список литературы - она лишней никогда не бывает. |
Цитата:
(function ($) {
$(function () {
$('div').mouseover(
//здесь вызов функции printId для этого дива, на который навели мышку
);
});
})(jQuery);
Строка 1: с какой целью здесь создаётся анонимная функция? Если для без конфликтной работы jQuery, то юзайте noConflict или sub; Строка 3: $('div') - никогда больше так не делайте) Всегда явно обозначайте свой элемент, а в случае, если их много - делегируйте событие; Также чувствуется явное не понимание методов jQuery. ЗЫ: ваше решение более изящное чем моё, но я просто думал, что помимо вызова функции в обработчике, будет ещё действия (кстати this можно было передать, как простой параметр функции;)). |
Цитата:
jQuery.noConflict();
(function($) {
$(function() {
//тут вызов функций и тп.
});
})(jQuery);
Цитата:
$('div[id^="link_pic_menu-"]').children('.links').children('a').mouseover(...);
(Оно и так работает, но если подскажите, как упростить, буду премного благодарен) Цитата:
|
$('div[id^="link_pic_menu-"] .links a').mouseover(...);
|
1) Я на 99% уверен, что вы можете написать просто:
$(function() {
//тут вызов функций и тп.
});
А событие лучше вешать так (хотя тоже кривоватый вариант, т.к. лучше создать один контейнер для делегирования) $('div[id^="link_pic_menu-"]').delegate(".links > a", "mouseover", function () { /* тут наш код */ });
|
Цитата:
|
Цитата:
1) объявление переменной (судя по всему это можно в любом месте делать) 2) описание собственной функции 3) вызов ее для определенных блоков ($('div[id^="link_pic_menu-"]')...) Цитата:
|
$('div[id^="link_pic_menu-"]')
- это не лучший вариант. Лучше: $('div.link_pic_menu')
Читаем про delegate: http://api.jquery.com/delegate/, http://habrahabr.ru/blogs/jquery/86604/ |
Цитата:
1) элементы ищутся в блоке с идентификатору (а не классом) link_pic_menu-... 2) идентификатор не link_pic_menu, а, к примеру, link_pic_menu-0. тем более, что на странице могут быть блоки с идентификаторами link_pic_menu-0, link_pic_menu-1, ... Цитата:
|
Вы не поняли. Делать выборку так, как делаете вы плохой вариант, потому что:
1). неаккуратно смотрится, плохо читается; 2). работает медленнее, чем выборка по классу; Для ваших целей лучше использовать класс, общий для всех элементов меню. Вы просто немного меняете (улучшаете) структуру <li id="link_pic_menu-1" class="link_pic_menu">...</li> <li id="link_pic_menu-2" class="link_pic_menu">...</li> <li id="link_pic_menu-3" class="link_pic_menu">...</li> |
Цитата:
|
| Часовой пояс GMT +3, время: 23:40. |