#javascript #sharepoint #bootstrap-4 #popper.js
#javascript #sharepoint #bootstrap-4 #popper.js
Вопрос:
Я создал веб-страницу в Sharepoint с помощью bootstrap, и содержимое заполняется с помощью javascript. Я использую всплывающее окно в таблице. Таблица генерируется с помощью javascript. Странно то, что всплывающее окно работает только после того, как я обновил страницу / перезагрузил ее с помощью F5.
Всплывающее окно за пределами таблицы работает нормально и при первой загрузке. Кроме того, код отлично работает без проблем на моем локальном компьютере, но на sharepoint он выходит из строя.
Вот некоторая инициализация кода:
<script src="jquery-3.5.1.slim.min.js"></script>
<script src="popper.min.js"></script>
<script src="bootstrap.min.js"></script>
затем вызывается функция для генерации таблицы:
<body onload="javascript: GenerateTable();">
за которым следует вызов popper:
$(function () {
$('.example-popover').popover({
})
})
Результатом является таблица, которая содержит следующую строку с поппером:
<td>Here is a question which needs a popper as info!amp;nbsp;amp;nbsp;
<div class="row justify-content-end">
<a href="#!" tabindex="0" class="badge badge-info" role="button" data-toggle="popover" data-trigger="focus" title="" data-content="This is a funny popover" title="Info">Info</a>
</div>
</td>
Мне кажется, что это проблема с порядком загрузки, но я не могу понять, почему он работает локально, но не в Sharepoint.
Ответ №1:
Я импортирую js из CDN, он хорошо работает в моей среде. Тестовый код для вашей справки:
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<body >
<td>Here is a question which needs a popper as info!amp;nbsp;amp;nbsp;
<div class="row justify-content-end">
<a href="#!" tabindex="0" class="badge badge-info" role="button" data-toggle="popover" data-trigger="focus" title="" data-content="This is a funny popover" title="Info" data-placement="right">Info</a>
</div>
</td>
</body>
<script>
$(function () {
$('.badge').popover();
})
</script>
Результат теста:
Если вам нужна дополнительная помощь, пожалуйста, поделитесь полным кодом.
Комментарии:
1. Спасибо за ваш комментарий. Я спросил коллег-экспериментаторов, и он указал, что порядок загрузки скриптов не всегда известен. Таким образом, мы помещаем вызов popover в специальную функцию:
function PopperCall(){$('[data-toggle="popover"]').popover();}
затем эта функция активно вызывается после генерации вопросов<body onload="javascript: GenerateTable(); PopperCall();">
. Может быть, вы можете прокомментировать вопрос о порядке вызова javascript, и я могу пометить его как решение ?!2. Просто опубликуйте свое решение, а затем отметьте его как ответ. Действительно, метод запуска динамически генерируемого элемента должен быть записан в методе динамически генерируемого элемента.
Ответ №2:
Проблема заключалась в порядке выполнения javascript. Поскольку код загружается из внешнего файла javascript, порядок загрузки кода неизвестен.
Таким образом, рекомендуется поместить функцию javascript из html-файла в явную функцию в файл javascript. Затем функция должна быть вызвана явно.
Файл Javascript:
function PopperCall(){
$('.example-popover').popover({});
$('.popover-dismiss').popover({trigger: 'focus'});
$('[data-toggle="popover"]').popover();
}
В HTML загрузка выполняется:
<body onload="javascript: GenerateTable(); PopperCall();">