Таким образом, проблема заключается в
$("#hint_dialog").dialog("close");
Я продолжал играть и в конце концов пытался
$("#hint_dialog").hide();
И он больше не прокручивается вверх.
Я создаю диалоговое окно jQuery, которое можно открыть и закрыть из разных кнопок, все работает нормально, за исключением случаев, когда я закрываю диалог, браузер прокручивается вверх. Я пробовал много предложений в Интернете, но никто, кажется, не поддерживает функциональность, не допуская прокрутки.
Я создаю диалог так:
function create_hint_widget(hint_text) {
if ($("#hint_dialog").hasClass("ui-dialog-content"))
{
$("#hint_dialog").dialog("open");
$("#hint_dialog").html(hint_text);
}
else
{
return $("<div id='hint_dialog' title='Help'>" + hint_text + "</div>")
.dialog({
resizable: true,
height: 200,
width: 300,
modal: false,
position: ['right', 180],
close: function(ev, ui)
{
$("#hint_dialog").dialog("close");
},
});
}
}
Это код Rails для создания ссылки, вызывающей диалог:
<%= link_to image_tag("hint_link.jpeg", :size=>"13x13"),
'javascript:;', :onclick => 'create_hint_widget("Enter a name for your template. Each template must have a unique name.");
return false;' %>
Я использую диалог открытия / закрытия для диалога, потому что я хочу, чтобы он сохранил свою позицию. event.stopPropagation (); не останавливает прокрутку и событие.preventDefault (); нарушает функциональность открытия / закрытия. Возможно, самое главное, когда я удаляю функцию close: она больше не прокручивается, но некоторые функции open / close перестают выполняться.
Перед открытием диалога проверьте, не фокусируетесь ли вы на любом другом элементе, кроме тела (например, поле ввода или кнопка и т. Д.). Если да, попробуйте вернуть фокус из любого элемента, прежде чем показывать диалог, примерно так:
if (document.activeElement) {
document.activeElement.blur();
}
Как я полагаю, он возвращается к сфокусированному предмету после закрытия.
Или получите значения прокрутки страницы, прежде чем открывать диалоговое окно, так же, как это: JavaScript получить окно X / Y позиции для прокрутки, а затем поймать событие закрытия и отменить прокрутку до ранее сохраненных значений после скрытия диалога.