Как программно вызвать всплывающее окно meteor-account-ui-bootstrap-3

Я использую meteor- account -ui-bootstrap-3 для своего приложения meteor.js. У меня есть кнопка, чтобы вызвать всплывающее окно входа в систему. Я использую следующий код, чтобы добавить класс CSS в #login-dropdown-list, Всплывающее окно появляется, когда я ставлю точку останова после оператора addClass. Но он исчезает после запуска функции. я добавить $('#login-username-or-email').focus(); но это тоже не работает. Здесь что-то не так?

'click .login-btn': function(e){
    e.preventDefault();
    $('#login-dropdown-list').addClass('open');
    $('#login-username-or-email').focus();
  }

Если я вручную добавлю "открыть" #login-dropdown-list, Оно работает. Что-нибудь вызывает закрытие события? Например, нажмите на вне всплывающего окна?

Заранее спасибо.

Джейк

2 ответа

Я сталкивался с этим, пытаясь решить ту же проблему. Похоже, что проблема связана с "всплывающим" событием "щелчок" в раскрывающемся списке.

Я смог решить эту проблему, заменив e.preventDefault() (который в любом случае служит другой цели) на e.stopPropagation (), который останавливает всплывающее окно. Также обратите внимание, что если вы хотите вообще отказаться от селекторов jquery, вы можете использовать Template._loginButtons.toggleDropdown(); Ваш пример будет выглядеть примерно так:

'click .login-btn': function(e){
    e.stopPropagation();
    Template._loginButtons.toggleDropdown();
}

-или же-

'click .login-btn': function(e){
    e.stopPropagation();
    $('#login-dropdown-list').addClass('open');
    $('#login-username-or-email').focus();
}

На мой взгляд, есть два варианта:

$("#login-buttons .dropdown-toggle").dropdown("toggle");

а также

$("#login-buttons").removeClass("open");

Я знаю, что это не очень хороший способ, но, к сожалению, бутстрап не дает нам что-то вроде dropdown("close"), Покопавшись в коде загрузчика, я обнаружил, что загрузчик предоставляет конструктор выпадающего списка, поэтому мы можем сделать что-то подобное.

$.fn.dropdown.Constructor.prototype.close = function() {
  this.parents(".dropdown").addClass("remove");
};

$.fn.dropdown.Constructor.prototype.open = function() {
  this.parents(".dropdown").addClass("open");
};

Тогда мы можем позвонить:

$("#login-buttons .dropdown-toggle").dropdown("open");
$("#login-buttons .dropdown-toggle").dropdown("close");

По крайней мере, это в одном месте, так что вы можете связать с ним некоторые события позже.

Другие вопросы по тегам