передача параметра 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/ |
| Часовой пояс GMT +3, время: 01:09. |