От новичка до гуру: Курсы программирования на CyberDuff

Как изменить содержимое всплывающего окна начальной загрузки, которое уже отображалось?

У меня есть форма с паролем, введенным дважды. Я проверяю сложность и согласованность пароля и отображаю соответствующие сообщения об ошибках во всплывающем окне, прикрепленном к полю INPUT:

<a href="#" id="aIdPwd2" data-toggle="manual" data-content="The password entered does not match the one previously entered" data-placement="right" href="#" rel="popover">
<input type="password" id="iIdPwd2" class="fmt1" size="60" value=""/>
</a>

С этим кодом:

$("#aIdPwd2").popover({content: msg});

Вы можете выбрать динамически сообщение, которое будет отображаться. Но раз оно было показано один раз, оно всегда будет оставаться одним и тем же.

Я прочитал много статей об этой популярной проблеме и пробовал много вещей (прикрепите 2 разных всплывающих окна к одному и тому же входу, измените внутренний html в getElementsByClassName("popover-content"), уничтожьте и воссоздайте всплывающее окно, ..), но без каких-либо успехов до сих пор.

Мы высоко оценили бы решение о том, как изменить содержимое всплывающего окна начальной загрузки, которое уже отображалось, или какой-либо обходной путь.


Ответы:


1
document.getElementsByClassName("popover-content")[0].innerHTML = 'something else';

уверен, что это не работает?

попробовал на этой странице, и все работает как положено.

ОБНОВЛЕНИЕ: это будет работать только в том случае, если всплывающее окно видно, потому что элемент воссоздается/уничтожается при каждом событии mouseover/mouseout.

я думаю, это не лучшее решение, но вы можете сделать это:

var msg = 'ben123 is not a goddamn password!';

document.getElementById('password').addEventListener('mouseover', function() {  
    document.getElementsByClassName("popover-content")[0].innerHTML = msg; 
});

и измените msg, когда вам нужно

11.08.2013
  • Я сделал еще несколько тестов с этим решением и нашел несколько интересных вещей: 1) Вам нужно сделать $(#example).popover('show'); до установки чего-либо в document.getElementsByClassName(popover-content)[0].innerHTML, иначе элемент не будет существовать, и это вызовет ошибку. 2) Если вы запускаете javascript, который отображается/устанавливается с помощью кнопки, то вы страдаете от некоторых сложных побочных эффектов, всплывающее окно автоматически скрывается, несмотря на data-toggle=manual, вызывая ошибку и искажая всю цепочку событий. Если вы можете справиться с этими двумя ограничениями, тогда это работает. 13.08.2013
  • Можете ли вы поделиться своим тестовым кодом, чтобы я мог проверить, ничего ли я не пропустил? 13.08.2013
  • когда вы закроете модальное окно в начальной загрузке, весь его html будет удален, поэтому вы ничего не найдете с помощью getElementsByClassName (popover-content) для этого модального окна. 21.12.2013

  • 2

    В Twitter Bootstrap 3 я просто обновляю содержимое и затем вызываю show. Вызов show обеспечивает правильное изменение размера и правильное расположение.

    $(".notes").data("bs.popover").options.content="Content1";
    $(".notes").popover("show");
    $(".notes").data("bs.popover").options.content="Content2";
    $(".notes").popover("show");
    

    Если вы используете теги данных для отображения содержимого, вам необходимо обновить тег данных, так как он имеет приоритет. например.

    $(".notes").attr("data-content","Content1");
    $(".notes").popover("show");
    $(".notes").attr("data-content","Content2");
    $(".notes").popover("show");
    

    Мне больше нравится второй вариант, потому что он не обращается к внутренностям, выполняя data(bs.popover) но первый вариант намного быстрее, так как он не обновляет дом. Так что выбирайте то, что плавает в вашей лодке.

    09.02.2014

    3

    Проблема с решениями, основанными на popover('show'), заключается в том, что если вы сделаете это в обработчике событий для события show, вы получите бесконечный цикл.

    Если вы просто хотите отобразить некоторый контент во всплывающем окне, когда он уже был показан, вам нужно будет напрямую изменить DOM:

    $("#aIdPwd2").next(".popover").find(".popover-content").html(msg);
    

    Например, если вам нужно всплывающее окно, которое будет загружать некоторые данные из API и отображать их в содержимом всплывающего окна при наведении:

    ДОМ:

    <a href="#" id="myPopover" data-toggle="popover" data-title="Details" data-api-parameter="someValue">Hover here for details</a>
    

    jQuery:

    $("#myPopover").popover({
        trigger: 'hover'
    }).on('shown.bs.popover', function () {
        var popover = $(this);
        var contentEl = popover.next(".popover").find(".popover-content");
        // Show spinner while waiting for data to be fetched
        contentEl.html("<i class='fa fa-spinner fa-pulse fa-2x fa-fw'></i>");
    
        var myParameter = popover.data('api-parameter');
        $.getJSON("http://api.example.com", {
            'apiParameter': myParameter
        }).done(function (data) {
            var result = data['apiReturnValue'];
            contentEl.html(result);
        }).fail(function (data) {
            result = "No info found.";
            contentEl.html(result);
        });
    });
    

    Это, конечно, предполагает, что вы доверяете данным, предоставленным api.example.com. Если нет, вы, вероятно, захотите избежать возвращаемых данных, чтобы смягчить атаки XSS.

    18.08.2016

    4

    Чтобы заменить содержимое всплывающего окна на элементе, сначала вызовите команду destroy. Протестировано на Bootstrap 3.1.1

    $("#aIdPwd2").popover('destroy').popover({content: msg});
    
    06.05.2015
    Новые материалы

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..

    Как работает дистанционное парное программирование и почему оно может изменить вашу жизнь
    Серебряная пуля от одиночества и отвлекающих факторов во время обучения программированию Независимо от того, работаете ли вы или учитесь удаленно, велика вероятность, что одиночество и..