https://getbootstrap.com/docs/5.0/components/popovers/
html <a> 태그 예시
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
javaScript 예시
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
페이지 아래쪽 content 예시
실제 작성 코드
html 부분
<td>
<c:url value="/board/boardView.do" var="viewURL">
<c:param name="what" value="$"></c:param>
</c:url>
<a class = 'poptitle' href="$" data-toggle="popover" >
$
</a>
</td>
javaScript
$(function () {
$("#listBody a").hover(function(){
// 초기화 후 토글
let url = this.href;
let retValue = null;
$.ajax({
url : url,
dataType: "json",
success:function(board){
titleValue = board.bo_title;
console.log($(this));
retValue = board.bo_content;
},
// 비동기 요청은 순서가 없어서
// 동기요청으로 바꾸겠다. 이 밑으로 응답 데이터가 나오기 전에 보내지 않겠다.
async : false,
cache : true,
error:function(xhr, error, msg){
console.log(xhr);
console.log(error);
console.log(msg);
}
});
$(this).popover({
html:true, content:retValue, title:titleValue
}).popover('toggle').popover({});
});
})
실제 이렇게 비동기 요청으로 변수 titleValue를 가지고 올 필요가 없음.
이미 페이지 로딩 시 최초의 boardVO에서 bo_title을 가지고 옴
<a class = 'poptitle' href="$" data-toggle="popover" >
$
data-toggle 앞에 title=$만 작성해 주면 됨.
$(function () {
$("#listBody a").hover(function(){
// 초기화 후 토글
let url = this.href;
let retValue = null;
let titleValue = null;
$(this).popover({
html:true, content:function({
$.ajax({
url : url,
dataType: "json",
success:function(board){
titleValue = board.bo_title;
console.log($(this));
retValue = board.bo_content;
},
// 비동기 요청은 순서가 없어서
// 동기요청으로 바꾸겠다. 이 밑으로 응답 데이터가 나오기 전에 보내지 않겠다.
async : false,
cache : true,
error:function(xhr, error, msg){
console.log(xhr);
console.log(error);
console.log(msg);
}
});
}), title:titleValue
}).popover('toggle').popover({});
});
})
이렇게 작성했을 시 ajax로 불러온 값이 다음 클릭 시에 반영됨.
이유를 알 수가 없다. 비동기 방식이라고 해도 async를 주었기 때문에 content:function({}) 이후의 title 부분이 content의 function이 끝난 이후 적용되어야 하는것이 아닐까...
해결 방법은 처음에 올려 두었던 비동기로 값을 받아온 이후 popover함수를 호출하는것....
어떻게 script가 작동하는지 그에 대한 공부가 더 필요한 듯 하다.
Uploaded by Notion2Tistory v1.1.0