css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
16 Июн
В документации к библиотеке jQuery тема событий и их обработки занимает значительное место. Поэтому мы разделим ее на две части и в сегодняшней статье поближе познакомимся с «основными» (условно конечно) методами – ready, bind, one, trigger и triggerHandler, unbind. А уже во второй части познакомимся с хэлперами – эдакими помощниками, используя которых, Вы сможете как вызывать определенные события, так и связывать с ними некоторые действия…
возвращает: jQuery
Назначает функции, которые будут выполняться всякий раз, когда объектная модель документа (DOM) готова к использованию. Это наверное самая важная функция, включенная в раздел «События», поскольку она может улучшить время реакции веб-приложений, и хорошая альтернатива использованию события window.onload, поскольку при использовании этого метода, Ваши функции будут вызваны уже в тот момент, когда объектная модель документа (DOM) готова к работе. Здесь не нужно ожидать, когда страница будет полностью загружена.
Аргумент, передаваемый обработчику события, является ссылкой на функцию jQuery. Можно использовать jQuery или $ без риска возникновения коллизий в пространстве имен. Однако необходимо убедиться в том, что не имеет обработчика события onload, в противном случае $(document).ready() может не выполниться.
На странице можно иметь сколь угодно много $(document).ready событий. В этом случае функции, связанные с ними, будут выполняться в порядке их следования.
В этом примере мы покажем сообщение о том, что DOM загружена и готова к работе.
$(document).ready(function(){
$("p:first")
.text("DOM загружена и готова к работе!");
});
// еще раз тоже самое
jQuery(document).ready(function(){
jQuery("p:last")
.text("Объектная модель документа готова!");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Связывает обработчик с одним или более событиями (например click) для каждого элемента набора. Может также связывать пользовательские события. Возможные события: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error. Обработчик события принимает объект событие, что делает возможным предотвращение поведения по умолчанию. Чтобы предотвратить и поведение по умолчанию и «всплывание» события (т.е. передачу события от одного элемента другому), обработчик должен возвращать false.
В большинстве случаев можно определить обработчики события как анонимные функции, как показано в следующем примере. Всякий раз, когда совершен клик на параграфе, в alert выводится текст этого параграфа.
$("p").bind("click", function(){
alert( $(this).text() );
});
В случае, если это невозможно, следует передавать дополнительные данные во втором параметре [data] (см. пример).
function handler(event) {
alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler);
Чтобы отменить действие по умолчанию и предотвратить «всплывание», возвращаем false:
$("form").bind("submit", function() { return false; });
Чтобы отменить только действие по умолчанию используется метод preventDefault.
$("form").bind("submit", function(event){
event.preventDefault();
});
Для предотвращения «всплывания» события используется метод stopPropagation.
$("form").bind("submit", function(event){
event.stopPropagation();
});
Также можно связать некие пользовательские события.
$("p").bind("myCustomEvent", function(e,myName,myValue){
$(this).text(myName + ", hi there!");
$("span").stop().css("opacity", 1)
.text("myName = " + myName)
.fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
$("p").trigger("myCustomEvent", [ "John" ]);
});
Откройте пример в отдельном окне и посмотрите исходный код.
В следующем примере демонстрируется обработка событий click и double-click на параграфе.
$("p").bind("click", function(e){
var str = "( " + e.pageX + ", " + e.pageY + " )";
$("span").text("Кликнуто! " + str);
});
$("p").bind("dblclick", function(){
$("span").text("Двойной клик сделан на "+this.tagName);
});
$("p").bind("mouseenter mouseleave", function(e){
$(this).toggleClass("over");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Примите во внимание, что пример демонстрируется во фрейме, соответственно и координаты вычисляются относительно фрейма.
возвращает: jQuery
Связывает обработчик с одним или более событиями, которые будут выполнены только один раз, для каждого элемента в наборе. Обработчик исполняется только один раз для каждого элемента. В остальном действуют те же правила, описанные при применении bind(). Обработчик события принимает объект событие, что делает возможным предотвращение поведения по умолчанию. Чтобы предотвратить и поведение по умолчанию и «всплывание» события (т.е. передачу события от одного элемента другому), обработчик должен возвращать false.
В большинстве случаев можно определить обработчики события как анонимные функции, как показано в следующем примере. Первый клик, который совершен на параграфе, выводит в alert текст этого параграфа.
$("p").one("click", function(){
alert( $(this).text() );
});
В случае, если это невозможно, следует передавать дополнительные данные во втором параметре [data]. В следующем примере связываем «одноразовый» клик с каждым элементом div.
var n = 0;
$("div").one("click", function(){
var index = $("div").index(this);
$(this).css({ borderStyle:"inset", cursor:"auto" });
$("p").text("DIV с индексом #" + index + " кликнут." +
" Всего " + ++n + " кликов.");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Вызывает событие (переданное в type) для каждого элемента набора. Однако это также вызовет выполнение браузером действий по умолчанию для этого события. Например, передавая ’submit’ в функцию trigger() Вы заставите браузер отправить форму. Действия браузера по умолчанию можно предотвратить, возвращая false для одной из функций, связанных с событием.
Чтобы отправить первую форму без использования submit(), надо проделать следующее:
$("form:first").trigger("submit");
Чтобы передать произвольные данные событию:
$("p").click( function (event, a, b) {
// при обычном клике по параграфу,
// a и b остаются неопределенными
// при клике вызванном через trigger(),
// a ссылается на "foo", b ссылается на "bar".
} ).trigger("click", ["foo", "bar"]);
В этом примере будет яснее. Следующий код выводит «Hello World!» в alert.
$("p").bind("myEvent", function (event,mess1,mess2) {
alert(mess1 + ' ' + mess2);
});
$("p").trigger("myEvent", ["Hello","World!"]);
Также можно вызывать пользовательские события, зарегистрированные в bind. В этом примере клик по button #2 вызывает клик по button #1. Но не наоборот.
$("button:first").click(function () {
update($("span:first"));
});
$("button:last").click(function () {
$("button:first").trigger('click');
update($("span:last"));
});
function update(j) {
var n = parseInt(j.text(), 0);
j.text(n + 1);
}
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Это особенный метод вызова всех связанных с элементом обработчиков событий БЕЗ выполнения браузером действий по умолчанию. Событие вызывается только для первого элемента, включенного в набор. Если набор элементов пуст, этот метод вернет ‘undefined’.
Испытайте следующий пример. Если Вы вызываете trigger(), то получаете соответствующее сообщение и можете заметить как браузер ТОЖЕ совершил действие по умолчанию – передал фокус элементу input. Попробуйте теперь (убрав фокус с элемента input) вызвать triggerHandler() – сообщение Вы также получите, но действия браузера по умолчанию не произойдет.
$("#old").click(function(){
$("input").trigger("focus");
});
$("#new").click(function(){
$("input").triggerHandler("focus");
});
$("input").focus(function(){
$("<span>Focused!</span>").appendTo("body")
.fadeOut(1000);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Это метод – противоположность bind, он удаляет все события связанные с элементом для каждого элемента набора. Можно также удалить пользовательские события, зарегистрированные в bind(). Если передан аргумент type – удалены будут все события этого типа.
Посмотрите внимательнее следующий пример. Нажатие на кнопку Bind, делает цветную кнопку «рабочей». Если же нажать кнопку Unbind, цветная кнопка больше не работает…
function aClick() {
$("div").show().fadeOut("slow");
}
$("#bind").click(function () {
$("#theone").click(aClick).text("Can Click!");
});
$("#unbind").click(function () {
$("#theone").unbind('click', aClick)
.text("Does nothing...");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Ну, для первой части достаточно, а во второй, как и обещал, будем знакомиться с хэлперами…
Отзывов (63) на «jQuery API: Events – события. Часть 1.»
Gennady, а Вы не сталкивались со странностями в работе ready(fn) под FF3?
Дело в том что он у меня отрабатывает только один раз после загрузки браузера. Или если я обновляю страницу с ним через Ctrl+F5. Причем под IE6/7, Сафари и Оперой этаже страница всегда работает! Я уже голову поломал что это может быть
Не замечал. В FF обычно все несуразности лечатся через Инструменты -> Удалить личные данные, а там чистятся кэш и cookies.
Мне как правило помогает…
Мне помогло частично – иногда срабатывает иногда нет o_0
Посмотреть можно тут http://wptema.ru/
Но больше на ручки – я с js не особо дружу.
Кликаешь на просмотр темы – перекидывает на демо сайт и там через js добавляется оранжевый сразу после – вот он то и то работает то нет. Я уже и на плагины грешу, и на ручки и на все сразу
Смотрю в FF 3.0.1 – раз наверное двадцать кликнул на предпросмотр – перекидывает туда, куда надо и видно, как оранжевая полоска вверху выскакивает. У Вас все как часы работает, никаких проблем.
Значит мой локльный глюк
Спасибо! И за статьи особо
Roland Chanishvily у Вас был включен Firebug? У меня тоже была такая проблема с ff3. Потом отключил Firebug и все прекрасно работало.
Volodimyr, спасибо, действительно был
Очень большое спасибо за статью и за ваш сайт.
Надо было сделать эмулирование клика на селекте, поиск в гугле по словам jquery событие дал на первом месте ваш сайт.
trigger() – помогло
пример про trigger(type, [data])
кликаем пару раз по кнопке 1, потом кликаем по кнопке 2 — эти клики зачитываются и для 1 и для 2 кнопки.
Ну и?… Именно про это и написано:
«В этом примере клик по button #2 вызывает клик по button #1. Но не наоборот.»
ой…
сорри. ориентировался на надпись в самом примере — делаю клик по второму батону, а пишется, как-бы, что и по первому кликнул.
это моя невнимательность…
27 кликов по кнопке #1.
15 кликов по кнопке #2.
Есть бага, при клике по второй всё равно засчитывает и первый.
Не сочтите за труд читать внимательнее. Хотя Вы и не первый уже. См. комментарии 9 – 11.
Подскажите пожалуйста если я например сначала в document.ready добавила какой-то код, а потом мне в него нужно добавить еще один, не стерая старый, как это можно реализовать?
Спасибо
Не очень понял вопрос…
$(document).ready(function(){
// какой-либо код
});
Что получается по сути – весь код (или много каких-то блоков кода), который Вы напишите внутри этой конструкции, фактически будет являться callback-функцией, которая вызывается при наступлении события ready, т.е. в тот момент, когда объектная модель документа загружена и готова к работе. И здесь Вы можете работать с любыми элементами, выбирать и изменять их, связывать с ними какие-либо события, добавлять элементы в DOM, отправлять ajax-запросы и т.д….
По сути мне нужно например сделать так:
сначала добовляю код1 –
$(document).ready(function(){
// какой-либо код1
});
потом например мне нужно еще к тому что у меня уже есть в document.ready добавить код2, но чтоб не стерся код 1, т.е.
$(document).ready(function(){
// какой-либо код2
});
чтоб в итоге получилось
$(document).ready(function(){
// какой-либо код1
какой-либо код2
});
Так вот можно или, если я еще раз обращаюсь к document.ready, он переприсваивает содержимое, т.е стирает старый код1 и вместо него записывает код2?
Спасибо
А по каким причинам весь требуемый код нельзя сразу написать? В конце концов Вы можете просто иметь на странице столько $(document).ready(function(){…}); сколько Вам нужно.
просто так получаться что весь код который должен быть в document.ready формируется в разных местах, функциях, вот и мне нужно чтобы он весь был в одном document.ready, чтобы не было несколько document.ready, а был один. Т.к. в итоге этот documrnt.ready помещается в функцию которая вызывается после загрузки всех скриптов на странице.
Ну вот как то так, просто тут все довольно сложно чтобы так быстро и просто объяснить …..
А я так и не поняла, когда я делаю еще раз присваивание в documrnt.ready какого-то кода,1 то если в documrnt.ready уже был помещен другой код2, то он сотрется или нет? Или получиться код1+код2?
Спасибо
Ок, давайте на простых примерах. Я не очень понимаю про присваивание… Пусть например код1 будет alert(‘codeOne’); а код2 – alert(‘codeTwo’);
Набросайте несколько строк кода, как именно Вы это пытаетесь делать, исходя из того, что сначала у Вас есть код1, а потом Вы хотите добавить еще и код2.
ага))) хорошо, пробую
Спасибо.
вопрос Татьяны из серии:
«а что будет, если я кликну по ссылке, она откроется или нет?»
- написать две строки и посмотреть удобнее для всех, чем лишний раз спросить.
$(document).ready(function(){alert(‘1′);});
$(document).ready(function(){alert(‘2′);});
Геннадий, спасибо за подборку.
Здравствуйте Геннадий!
У меня вопрос может не совсем в тему.
Но у меня на форме 2 кнопки Submit.
Как отловить их события, т.е. у каждой кнопки разные события.
Хорошая статья и блог в целом!
submit – это событие, которое возникает при отправке формы… Я не знаю точно, что Вы хотите достичь, но вероятно Вам стоит отлавливать не собственно submit, а click на соответствующей кнопке, а в зависимости от того на какой кнопке был произведен клик – выполнять разные действия, в т.ч. вызвать и событие отправки формы.
Вход в систему
пользователя:
Пароль:
первый submit будет запускать login.php,
а втрой submit будет запускать vip-login.php,
Вот моя форма, т.е в одной форме будет просто вход и VIP-вход
У меня не получается отловить событие второй кнопки, все время срабатывает первый submit.
Если есть возможность подскажите как мне их отловить
что-то код не загрузился, но суть в этом
первый submit будет запускать login.php,
а втрой submit будет запускать vip-login.php,
в одной форме будет просто вход и VIP-вход
У меня не получается отловить событие второй кнопки, все время срабатывает первый submit.
Если есть возможность подскажите как мне их отловить
Покажите все-таки код. Можно прислать на почту отсюда: http://www.linkexchanger.su/about
Да я вроде бы разобрался.
$(«#bt1″).click(function() )
$(«#bt2″).click(function() )
Большое спасибо
Еще один вопрос разрешите.
$(‘input[type=submit]‘).click(function()
$(‘input[@type=submit]‘).click(function()
Если не трудно объясните почему в некоторых статья используют «@», а в некоторых нет. Для чего этот символ «@».
Я лично когда его использую у меня перестает работать!
С Уважением Константин
Начиная с версии библиотеки jQuery 1.3 символ @ в этом выражении больше не используется. Если же работаете с версиями 1.2, то там он нужен.
Спасибо за помощь!
Отличный сайт, респект автору!
Вопрос такой: необходимо «повешать» на элемент обработчик click и dblclick, но получается (даже в Вашем примере), что при вызове dblclick вначале вызывается обработчик click, и только потом уже dblclick. Можно ли как то их «разделить», т.к. требуются разные действия.
При dblclick происходит такая последовательность: click – click – dblclick. Т.е. событие click происходит по-любому. Как выход, можно передать callback-функции объект event и на основания значения event.type строить логику обработки.
Про dblclick:
Про колбэк – это сработает при отлове именно даблклика, т.е. клик все равно будет срабатывать 2 раза… Известен ли Вам способ отменить именно клик, при даблклике…
Как идея – может быть делать какую то временную задержку и потом опрашивать был ли второй клик? Вопрос в том – каким способом опрашивать?
Зравствуйте, Геннадий!
Не знаю даже сможете ответить на вопрос или нет. Но все таки.
Есть код, который в цикле генерирует имена (к примеру)
{$item.user_login}
Ka class=Zx7Z name=ZsimonaZK simona K/aK
Ka class=Zx7Z name=ZannZK ann K/aK
Ka class=Zx7Z name=ZsanekZK sanek K/aK
Z=двойныые кавычки
K=треугольные скобки
как в коде (ниже) сделать так чтобы появлялся message типа “К игое приглашен sanek (берется name от класса)”…
……..
$(”.x7″).click(function() //… используя только ! 1 функцию
{
alert(’К игре приглашен ‘);
});
………
Буду очень признателен. Спасибо
Михаил, я в отпуске сейчас. Тут хоть связь и есть, но не без проблем. Буду только числа 22-го. Поэтому Вы уж сами пока как-то…
$(«.x7″).click(function(){
var name = $(this).attr(«name»);
alert(‘К игре приглашен ‘+name);
});
СПАСИБО !
Добрый день,
Всё никак не могу понять, а может ли trigger вызвать естественную функцию объекта, а не пользовательскую?
К примеру у меня есть Select
One
Two
Three
Так вот я создал рядом кнопку, по которой я хотел бы чтобы список выпадал (естественный dropdown).
Пытаюсь создать так
$(«#mybutton»).click(function(){
$(«#mySelect»).trigger(«click»);
});
Совершенно не помогает.
Gennady, у меня к Вам вопрос можно ли по вводу в текстовое поле проверить соответствие со значением вбазе. но не нажимая сабмит?
To Глеб:
не поможет – см. события элемента select. Возможно использовать focus(), blur(), change().
To Анастасия:
можно – отправить ajax-запрос по событию например keyup(fn), и передать в запросе данные из этого поля. Ну, а получив ответ уже и решать, что делать дальше.
Здравствуйте!
Можете подсказать у меня вот такой код
$(‘a[@id^=save_]‘).each(function(i)
{
$(this).click();
});
Мне нужно как-то получить то что возвращает функция, которая происходит на событие click.
а навешивается функция на клик так
/* save icon click handler */
$(‘a[@id=save_'+id+']‘).click(function()
{
/*код*/
return res;
});
и мне нужно получить этот res …..
Имхо, много лишнего делаете…. Наверное лучше так:
$(’a[id^=save_]’).click(function(){ res = $(this).что-то_там_делаем; });т.е. обработчик клика у Вас развешан на всех ссылках, id которых начинается с символов save_. Внутри обработчика this ссылается на тот самый элемент, по которому кликнули, на конкретный a. Делайте с ним что угодно и результат в res.
Кстати, символ @, начиная с версии 1.3 использовать неправильно – будут ошибки.
Спасибо, но мне нужно немного не так …..
Внутри обработчика у меня вызывается другая функция F(), которая возвращает true или false ….. и мне нужно при вызыве события click у тега a вернуть то что возвращает эта F(), т.е ….. как то так
var res = $(’a[@id^=save_]’).click();
Я в логике наверное чего-то недопонимаю – Вы обходите в цикле все выбранные ссылки и пытаетесь вызвать в каждой событие клик? Но, если вызывать событие, тогда
$(this).trigger(‘click’);
дальше пока не понимаю – мне цель непонятна…
да наверное это нельзя сделать ….. мне нужно получить значение, которое возвращает событие, т.е. обработчик для каждой ссылки
window. res = true;
$(’a[@id^=save_]’).each(function(i)
{
window.res = $(this).click();
});
И если хоть одна возвращает false то тогда я делаю один код, иначе другой
Есть ли в jQuery (или в какой стороне искать) событие прокрутки колесика мышки вверх/вниз?
См. в Events http://docs.jquery.com/Events/scroll#fn
См. в CSS/Positioning http://docs.jquery.com/CSS
.scroll() я так понял отлавливает не само событие скроллинга мышки, а уже что-то более позднее… и не способно распознать направление куда пользователь повернул колесик.
Более позднее…. не понимаю… Возникло событие – пошла реакция на него в виде вызова какой-либо функции… Направление – да, не отслеживает, но я дал ссылку на раздел CSS, где можно использовать метод scrollTop(), чтобы отследить направление.
Т.е. если Вы хотите что-то готовое, то нет – такого нет. Это надо самому ваять
Здравствуйте!
у меня вот такой вот код:
function SelectPlace(op) {
$(«#select>option[@value='"+op+"']«,
opener.document).attr(«selected»,»selected»);
// это отрабатывает.
$(«#select», opener.document).trigger(‘change’);
// вот на этом летит( причем только в IE8
self.close();
}
не подскажите в чем может быть проблема?
за ранее спасибо!
Слава, а какую версию библиотеки используете?
jQuery 1.2.6 вот эту!
Но последнюю с сайта качал. Пробовал её не помогло. Или может не последнюю))) сейчас попробую посмотреть какая последняя и использовать её)
извиняюсь что так много спамлю!
Скачал с официального сайта новую версию jQuery 1.3.2.
Все по прежнему!
$(”#select”, opener.document).trigger(’change’);
на этом летит! только блин мне тестеры сказали что не работает в IE8, а оказывается во всех IE не пашет! как со старой так и с новой библиотекой. Причем если тригер привязывать на текущей странице то все нормально работает! А если пытаешься привязать к элементу на родительской странице, не выходит)))
2 Слава:
Если Вы используете тот код, что в посте от 24 числа – то Вам нужна версия ниже 1.3. Если версия 1.3+, тогда убирайте знак @.
Теперь по делу….
Я не очень понял, что именно Вы хотите сделать. Ясно, что в контексте открытого окна устанавливаете значение в селекте. Непонятна следующая строка….
Мне кажется Вы хотели (ну, по крайней мере по логике – окно открылось, юзер выбрал, окно закрылось) по событию change селекта закрывать окно.
Но тогда это должно «звучать» несколько иначе:
$("#select").change(function(){ self.close(); });что-то вроде этого, если я с самой идеей не ошибся…
Здравствуйте
trigger почему-то не срабатывает с ссылками
код такой
$(document).ready(function(){
$(‘#hh’).click(function(){
$(‘#g1′).trigger(‘click’);
})
})
<a href=’http://localhost/site8/gall3.php’>Портфолио</a>
это особенность ссылок или я что -то пропускаю?
Если хотите по клику на #hh сделать переход по адресу ссылки с #g1 – не получится. Чтобы получилось на #g1 надо вешать свой обработчик клика и в нем например location.href = «куда-то-там»;
Почему – не задумывался, если честно… Хотя в документации четко написано, что выполняется дефолтное действие браузера тоже.
Не могу никак разобраться с перекрывающимися событиями.
Небольшой пример:
Есть блок div#outer, внутри есть ссылка и скрытый (display:none) div.info с несколькими параграфами и пр. информацией.
При наведении на ссылку она должна скрываться, а внутренний div показываться.
Скрытие/показ сделал:
$(‘#outer’).mouseover(function(){
$(this).children(‘a:first’).css(‘display’,'none’);
$(this).children(‘div.info’).fadeIn(‘fast’);
}).mouseout(function(){
$(this).children(‘div.info’).fadeOut(‘fast’);
$(this).children(‘a:first’).removeAttr(’style’);
});
Но получается так, что если я начинаю по внутреннему div.info перемещать мышкой, то при переходе от одного тега к другому (при наведении на них мышкой), срабатывает эффект наведения на внешний блок.
Чувствую, что тут можно применить stopPropagation, но не пойму как.
stopPropagation тут не нужен. Тут засада в другом. Смотрите – при наведении указателя мыши на ссылку вызывается обработчик mouseover, который эту ссылку скрывает. Как только ссылка скрыта, ес-но возникает событие mouseout (формально указатель мыши покинул пределы элемента), а соответствующий обработчик показывает чуть ранее скрытую ссылку. Тут же происходит mouseover, поскольку указатель мыши опять находится над элементом…. И так бесконечно.
Кстати, вместо пары mouseover – mouseout можно использовать hover(fn1,fn2), но только эффект будет тот же.
Может стоит решить задачу чуть изменив логику (или например разметку)?
В том то и дело, что у меня событие наведения/отвода назначено на внешний контейнер div#outer, а ссылка внутри него чисто для визуального восприятия. И этими событиями я меняю содержимое блока div#outer.
И как мне кажется, получается такая ситуация:
Есть контейнер div#outer с неким содержимым1.
При наведении на него содержимое1 скрывается и показывается содержимое2.
При этом получается, будто внутренние теги перекрывают событие, назначенное на внешний контейнер таким образом, что как только мышка сходит с границы какого-либо внутреннего тега, снова срабатывает событие, назначенное внешний контейнер, т.е. снова показывается содержимое2 промаргиванием из-за fadeIn.
Но что самое интересное — как только заменил mouseover/mouseout на hover(fn1,fn2), этот странный глюк пропал!
Спасибо за наводку.
Геннадий, добрый день.
Я очередной проситель
1. Возможно ли отключить скролл на странице, чтобы скроллбар отображался, а скролл не происходил (это же касается и «альтерналивного» скролла колесиком мыши, нажатым колесиком мыши и т. п.)?
2. Почему-то не срабатывает попытка отключения скролла (возможно я плохо представляю объектную модель документа):
$(document).ready(function() {
$(«#draggable_element»).draggable();
$(«#draggable_element»).draggable(‘option’, ‘containment’, [10, 10, 30, 30]);
$(«#draggable_element»).draggable(‘option’, ’scroll’, false);
$(window).scroll(function(event){
event.preventDefault();
});
//а отключение клика для любой ссылки в документе работает
$(«a»).click(function(event){
event.preventDefault();
alert(«only click»);
});
});
Заранее благодарен.
Максим, Вам бы в статье про Draggable и писать надо было. Вы просто немного невнимательно прочитали описание опции scroll и не того ждете…
scroll – по умолчанию установлено значение true – при перемещении элемента к краю области просмотра, она автоматически прокручивается бесконечно. Если установить значение false, эта возможность будет запрещена.
Т.е. не будет прокрутки в бесконечность, а не вообще…
И еще, зачем так много лишнего кода?
$(”#draggable_element”).draggable({ containment: [10, 10, 30, 30], scroll: false });такого вполне достаточно (если конечно у Вас нет задачи менять настройки именно после инициализации).
Обсуждение статьи можно продолжить на форуме jQuery.