передача параметра 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, время: 10:48. |