Диалог jQueryUI прокручивается вверх, когда нажимает кнопку закрытия в IE

Щелчок по строке заголовка диалога заставляет IE прокручивать страницу в верхней части диалогового окна, если диалог расположен частично на странице. Но это также происходит, если пользователь нажимает кнопку закрытия. Это означает, что пользователю нужно дважды нажать кнопку закрытия.

$('#divDialog').dialog({height:500, position:[10, 1000]});

Я создал jsfiddle, чтобы продемонстрировать: http://jsfiddle.net/e9zAK/

Переместите диалог, пока он не будет частично удален с экрана. Затем попробуйте нажать кнопку закрытия. Он будет прокручивать страницу, чтобы она соответствовала, но фактически не закрывала диалог. Это, похоже, не происходит в Firefox или Chrome.

Есть ли способ переопределить эту функциональность? Я не хочу использовать позицию: исправлено.

Ответ 1

Больше странности IE. Он отправляет событие mousedown, но не mouseup и, следовательно, не событие click. Я не знаю, что вызывает это, но вы можете обойти это, связав слушателя с mousedown:

$('.ui-dialog-titlebar-close').mousedown(function() {
    $('#divDialog').dialog('close');
});

Это выглядит несколько неприятным взломом, но, похоже, это общий подход при работе с IE.

Ответ 2

Я пришел сюда, потому что у меня была аналогичная проблема. В моем случае это происходит в Chrome (53.0.2785.143 м, Windows) и срабатывает при нажатии кнопки, расположенной внутри строки заголовка, вызывая скачок, когда страницу, с его диалогом, была прокрутило несколько (или несколько) из пикселей сверху, помещая его снова в верхнюю часть окна, а не запуская то, что должна была делать кнопка.

После некоторого исследования, главным образом, с помощью самого Chrome расслоения плотного отладчика, я нашел слушатель событий на ui-dialog-titlebar, что соответствует диалоговому строки заголовка, и WHAS срабатывает при mousedown события (подробнее о ках линии 9161, файл jquery-ui.js, jQuery UI v1.9.2, вероятно, он решается в более поздних версиях). После этого стало ясно, что удаление обработчика решит проблему, которую я сделал в событии open в коде инициализации диалога:

$(".selector").dialog({
    open: function(event,ui){
        $(this).parent().find('.ui-dialog-titlebar').unbind('mousedown');
    }
})

Обратите внимание, что это, вероятно, будет мешать, если у вас есть какое-то действие перетаскивания, связанное с заголовком.