Диалоговое окно jQuery закрывает браузер прокрутки вверх

Я создаю диалоговое окно 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 перестают выполняться.

jquery,

0

Ответов: 2


0

Таким образом, проблема заключается в

$("#hint_dialog").dialog("close");

Я продолжал играть и в конце концов пытался

$("#hint_dialog").hide();

И он больше не прокручивается вверх.


0

Перед открытием диалога проверьте, не фокусируетесь ли вы на любом другом элементе, кроме тела (например, поле ввода или кнопка и т. Д.). Если да, попробуйте вернуть фокус из любого элемента, прежде чем показывать диалог, примерно так:

if (document.activeElement) {
    document.activeElement.blur();
}

Как я полагаю, он возвращается к сфокусированному предмету после закрытия.

Или получите значения прокрутки страницы, прежде чем открывать диалоговое окно, так же, как это: JavaScript получить окно X / Y позиции для прокрутки, а затем поймать событие закрытия и отменить прокрутку до ранее сохраненных значений после скрытия диалога.

JQuery,
Похожие вопросы