Потеря события MouseUp при выпуске не над одним и тем же элементом

У меня проблема со слайдером. Когда я беру обработчик, я изменяю .src изображения, просто чтобы изменить его цвет. Тем не менее, я хочу, чтобы он вернулся к исходному цвету, когда я отпущу кнопку мыши. Я попробовал две вещи.

1) Вернуть его на событие mouseup обработчика: это работает, только если я отпущу кнопку над обработчиком, так что это не решение.

2) Верните его обратно на событие windowup mouseup: событие не запускается должным образом. Если я щелкаю и отпускаю в любом месте окна, событие запускается нормально, но если я щелкаю в обработчике, перемещаю курсор в любую другую точку окна и затем отпускаю кнопку, событие не будет запускаться.

Кстати, я использую прототип JS Framework.

Решения? Спасибо

Вот код Я загружаю функцию обработчика, когда документ готов.

function handler()
{

    var handler = $('handler');

    Event.observe(window, "mouseup", function(){
        alert('salta');   //to see when mouseup fires
        if(handler.src=='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper_o.png'){    //orange
            handler.src='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper.png';}    //grey
    });


    Event.observe(handler,'mousedown',function(){handler.src='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper_o.png';});    //orange

}
 lincolnk30 сент. 2010 г., 19:37
вы прикрепляетеmouseup обработчикwindowнеdocument, Они не то же самое.
 Alexander Sagen30 сент. 2010 г., 16:38
Код был бы хорош. Трудно отладить в противном случае.

Ответы на вопрос(3)

когда документ готов.

function handler()
{

    var handler = $('handler');

    Event.observe(window, "mouseup", function(){
        alert('salta');   //to see when mouseup fires
        if(handler.src=='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper_o.png'){    //orange
            handler.src='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper.png';}    //grey
    });


    Event.observe(handler,'mousedown',function(){handler.src='http://localhost/moodle/blocks/videoavatar/eggface/trunk/gripper_o.png';});    //orange

}
 lincolnk30 сент. 2010 г., 19:34
это должно быть отредактировано в исходном сообщении, а не добавлено в качестве ответа. Я редактировал ваш вопрос, это можно удалить.
Решение Вопроса

mouseup обработчикdocument объект.

 semperos03 авг. 2011 г., 23:12
@lincolnk Поскольку я использую ползунки пользовательского интерфейса jQuery, я просто использовал более общее событие «slidestop». Спасибо за комментарий.
 semperos03 авг. 2011 г., 21:30
Это работает, но я бы предпочел не захватывать каждую мышиную строчку, потому что я выполняю дорогостоящую операцию, когда ловлю мышеловку для ползунков. Любые другие решения?
 Alberto Mnemon30 сент. 2010 г., 17:03
извините, вы можете объяснить немного больше?
 lincolnk03 авг. 2011 г., 22:07
@semperos добавить чек, прежде чем делать дорогие вещи? если это сложнее, чем это, вы должны задать новый вопрос.
 lincolnk30 сент. 2010 г., 17:10
Ваша функция, которая устанавливает ползунок обратно в исходный цвет, должна вызываться, когдаdocument детектируетmouseup, а не когда ваш элемент слайдера делает. прикрепление кdocument вызовет обработчик событий, если вы отпустите кнопку мыши в любом месте веб-страницы, а не только над ползунком. опубликуйте свой нерабочий код, если вам нужна более конкретная помощь по его исправлению
 Alberto Mnemon30 сент. 2010 г., 17:23
Кажется, именно это я и делаю, может быть, вы не поняли меня из-за моего английского. Я опубликую код, чтобы прояснить ситуацию для всех нас.
 Alberto Mnemon01 окт. 2010 г., 10:02
да, это сработало! Как вы сказали, я прикрепил его к окну, а не к документу. Спасибо Линкольнк, и извините за код!
 Don Hatch10 дек. 2016 г., 12:42
Может быть, установитьmouseup обработчикdocument на вашем слайдереmousedown, и удалить его на мышь вверх? Тогда он будет вызван только тогда, когда вы действительно в этом заинтересованы.

onmouseout событие?

 Alberto Mnemon30 сент. 2010 г., 16:47
Это не то, на что я смотрю. Onmouseout сработает, если вы переместите курсор из ползунка. Однако вы все еще управляете ползунком, даже если вы перемещаете курсор в любое место окна, пока не отпустите кнопку. И, если вы управляете ползунком, ползунок цветной, это то, что я хочу.

Ваш ответ на вопрос