Ошибка Mouseup во всех браузерах, кроме Firefox? - PullRequest
8 голосов
/ 10 ноября 2010

Mouseup не срабатывает на полосе прокрутки для динамически добавляемых элементов (кроме Firefox):

CSS:

#dBox {
    height: 100px;
    width: 230px;
    overflow - y: auto;
}

HTML:

<input type="text" id="s">

JQuery:

$(function() {
    $('#s').focus(function() {
        var $dbox = $('<ul id="dBox"></ul>');
        for (i = 0; i < 10; i++) $dbox.append('<li>' + i + '</li>');
        $(this).after($dbox);
        $dbox.bind("mouseup", function() {
            alert('in: ');
            //console.log ('in: ');  
        });
    });
});
// OR LIKE THIS
$('#s').focus(function() {
    var $dbox = $('<ul id="dBox"></ul>');
    for (i = 0; i < 10; i++) $dbox.append('<li>' + i + '</li>');
    $(this).after($dbox);

});
$('#dBox').live("mouseup", function() {
    alert('in: ');
    //console.log ('in: ');  
});

Если вы щелкнете в любом месте на ul, будет срабатывать НО не на полосе прокрутки. Та же проблема существует во всех браузерах, кроме Firefox.

Если вы замените 'mouseup' на 'mousedown', она будет срабатывать и на полосе прокрутки во всех браузерах.

После нескольких дополнительных тестов кажется, что не имеет значения, добавлено ли «ul» динамически или нет, но mouseup просто не распознает полосу прокрутки как часть «ul» (кроме FF).

И та же проблема, если заменить 'ul' на 'div' и 'li' на 'p'.
<div id="dBox" class="" ><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p></div>

$('#dBox').mouseup(function () {alert ('in: ');});

1 Ответ

3 голосов
/ 06 апреля 2011

Да.Вот открытая ошибка в Chrome: http://code.google.com/p/chromium/issues/detail?id=14204

А в веб-наборе: https://bugs.webkit.org/show_bug.cgi?id=25811 и https://bugs.webkit.org/show_bug.cgi?id=40648

Вот снисходительный ответ от Microsoft: http://social.msdn.microsoft.com/Forums/en-US/netfxjscript/thread/3749b8a1-53ef-48fe-be81-b2df39d6154f/

Этот последний поток поднимает возможность использования onscroll вместо onmouseup.Это может быть частичным решением проблемы.

...