Twitter 부트스트랩 - 탭 - URL이 변경되지 않음
저는 트위터 부트스트랩과 "탭"을 사용하고 있습니다.
다음 코드가 있습니다.
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#add">add</a></li>
<li><a data-toggle="tab" href="#edit" >edit</a></li>
<li><a data-toggle="tab" href="#delete" >delete</a></li>
</ul>
탭은 제대로 작동하지만 URL의 에 #add, #edit, #delete가 추가되지 않았습니다.
가 때할거를 제거할 때.data-toggle
URL은 변경되지만 탭이 작동하지 않습니다.
이것에 대한 해결책이 있습니까?
이 코드를 사용해 보십시오.페이지 로드 시 해시를 기준으로 url + open 탭에 탭을 추가합니다.
$(function(){
var hash = window.location.hash;
hash && $('ul.nav a[href="' + hash + '"]').tab('show');
$('.nav-tabs a').click(function (e) {
$(this).tab('show');
var scrollmem = $('body').scrollTop() || $('html').scrollTop();
window.location.hash = this.hash;
$('html,body').scrollTop(scrollmem);
});
});
완전한 솔루션에는 다음과 같은 세 가지 구성 요소가 필요합니다.
- URL에 해시가 있으면 페이지가 로드될 때 올바른 탭을 표시합니다.
- 탭이 변경될 때 URL의 해시를 변경합니다.
- URL에서 해시가 변경되면 탭을 변경하고(뒤로/앞으로 버튼) 첫 번째 탭이 올바르게 순환되었는지 확인합니다.
저는 여기에 있는 어떤 논평도, 그리고 받아들여진 답변도 이 모든 시나리오를 다루지 않는다고 생각합니다.
관련된 부분이 꽤 많기 때문에 작은 jQuery 플러그인으로 가장 깔끔하다고 생각합니다: https://github.com/aidanlister/jquery-stickytabs
플러그인을 다음과 같이 호출할 수 있습니다.
$('.nav-tabs').stickyTabs();
저는 이것을 위한 블로그 게시물을 만들었습니다, http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/ .
용사를 합니다.data-toggle="tab"
플러그인이 탭을 처리하도록 요청하고, 이를 수행하는 동안 호출합니다.preventDefault
이벤트(기트허브의 코드).
자체 탭 활성화를 사용하여 이벤트를 진행할 수 있습니다.
$('.nav-tabs a').click(function (e) {
// No e.preventDefault() here
$(this).tab('show');
});
속성 ▁the▁attribute▁remove다합니▁and▁must▁you야를 제거해야 합니다.data-toggle="tab"
의심이 있으면 의사를 확인합니다.
앵커 요소가 이미 URL 해시를 변경했으므로 해시 변경 이벤트를 듣는 것도 좋은 방법입니다.@flori가 이미 언급했듯이, 이 방법은 브라우저 뒤로 버튼과 잘 작동합니다.
var tabs$ = $(".nav-tabs a");
$( window ).on("hashchange", function() {
var hash = window.location.hash, // get current hash
menu_item$ = tabs$.filter('[href="' + hash + '"]'); // get the menu element
menu_item$.tab("show"); // call bootstrap to show the tab
}).trigger("hashchange");
마지막으로, 수신기를 정의한 직후 이벤트를 트리거하면 페이지 로드 시 올바른 탭을 표시하는 데 도움이 됩니다.
당신의 문제에 대한 나의 해결책:
새 을 추가합니다.data-value
각의속에 a
과 같이 표시됩니다.
<ul class="nav nav-tabs">
<li class="active">
<a data-toggle="tab" href="#tab-add" data-value="#add">add</a>
</li>
<li>
<a data-toggle="tab" href="#tab-edit" data-value="#edit">edit</a>
</li>
<li>
<a data-toggle="tab" href="#tab-delete" data-value="#delete">delete</a>
</li>
</ul>
를 들어, 둘를, 탭의 ID 변니에서 변경합니다. 예:add
tab-add
하도록 업데이트합니다.tab-
접두사:
<div class="tab-content">
<div class="tab-pane" id="tab-add">Add panel</div>
<div class="tab-pane" id="tab-edit">Edit panel</div>
<div class="tab-pane" id="tab-delete">Panel panel</div>
</div>
그리고 마지막으로 js 코드:
<script type="text/javascript">
$(function () {
var navTabs = $('.nav-tabs a');
var hash = window.location.hash;
hash && navTabs.filter('[data-value="' + hash + '"]').tab('show');
navTabs.on('shown', function (e) {
var newhash = $(e.target).attr('data-value');
window.location.hash = newhash;
});
})
</script>
여기 jsFiddle이 있습니다. 하지만 jsFiddle에서 사용하는 iframe 때문에 작동하지 않지만, 제 솔루션의 소스를 읽을 수 있습니다.
케이크와 같은 문제부트스트랩 3 탭이 있는 PHP, 그리고 외부 URL 및 앵커와 함께 보낼 때, 이것을 만든 많은 솔루션을 검토한 후 메뉴를 잃는 섹션으로 점프합니다...
덕분에: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
$(document).ready(function()
{
//Redirecciona al tab, usando un prefijo al cargar por primera vez, al usar redirect en cake #_Pagos
//Redirecciona al tab, usando #Pagos
/* Automagically jump on good tab based on anchor; for page reloads or links */
if(location.hash)
{
$('a[href=' + location.hash + ']').tab('show');
}
//Para evitar el bajar al nivel del tab, (al mostrarse el tab subimos)
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e)
{
location.hash = $(e.target).attr('href').substr(1);
scrollTo(0,0);
});
//Actualiza el URL con el anchor o ancla del tab al darle clic
/* Update hash based on tab, basically restores browser default behavior to
fix bootstrap tabs */
$(document.body).on("click", "a[data-toggle]", function(event)
{
location.hash = this.getAttribute("href");
});
//Redirecciona al tab, al usar los botones de regresar y avanzar del navegador.
/* on history back activate the tab of the location hash if exists or the default tab if no hash exists */
$(window).on('popstate', function()
{
//Si se accesa al menu, se regresa al tab del perfil (activo default), fixed conflict with menu
//var anchor = location.hash || $("a[data-toggle=tab]").first().attr("href");
var anchor = location.hash;
$('a[href=' + anchor + ']').tab('show');
});
});//Fin OnReady
해시 변경에 대응하는 간단한 방법도 있습니다(예: 뒤로 버튼).해시 변경 이벤트 수신기를 maszbak 솔루션에 추가하기만 하면 됩니다.
$(function(){
// Change tab on load
var hash = window.location.hash;
hash && $('ul.nav a[href="' + hash + '"]').tab('show');
$('.nav-tabs a').click(function (e) {
$(this).tab('show');
var scrollmem = $('body').scrollTop();
window.location.hash = this.hash;
$('html,body').scrollTop(scrollmem);
});
// Change tab on hashchange
window.addEventListener('hashchange', function() {
var changedHash = window.location.hash;
changedHash && $('ul.nav a[href="' + changedHash + '"]').tab('show');
}, false);
});
OP가 JQuery를 사용하여 말한 것으로 알고 있지만 바닐라 JS를 사용하여 간단히 수행할 수 있습니다.
document.querySelectorAll('ul.nav a.nav-link').forEach(link => {
link.onclick = () => window.history.pushState(null, null, link.attributes.href.value);
});
가장 간단한 것은 문서화된 데이터를 사용하고 있다고 가정할 때data-toggle="tab"
여기에 설명된 구문:
$(document).on('shown.bs.tab', function(event) {
window.location.hash = $(event.target).attr('href');
});
저는 부트스트랩 3.3.*을 사용하고 있는데 위의 솔루션 중 어떤 것도 제게 도움이 되지 않았고 심지어 답변 1로 표시되었습니다.저는 단지 아래 스크립트를 추가하고 작업했습니다.
$(function(){
var hash = document.location.hash;
if (hash) {
$('.navbar-nav a[href="' + hash + '"]').tab('show');
}
$('a[data-toggle="tab"]').on('click', function (e) {
history.pushState(null, null, $(this).attr('href'));
});
});
이것이 도움이 되길 바랍니다.
Ruby on Rails 또는 다른 서버 사이드 스크립트를 사용하는 사용자는anchor
경로 옵션.페이지가 로드되면 사용 가능한 URL 해시가 없기 때문입니다.링크 또는 양식 제출을 통해 올바른 탭을 제공해야 합니다.
<%= form_for @foo, url: foo_path(@foo, anchor: dom_id(foo)) do |f| %>
# Or
<%= link_to 'Foo', foo_path(@foo, anchor: dom_id(foo)) %>
접두사를 사용하여 창이 ID로 이동하지 않도록 하는 경우:
<%= form_for @foo, url: foo_path(@foo, anchor: "bar_#{dom_id(foo)}") do |f| %>
그러면 당신은 커피스크립트:
hash = document.location.hash
prefix = 'bar_'
$('.nav-tabs a[href=' + hash.replace(prefix, '') + ']').tab 'show' if hash
$('.nav-tabs a').on 'shown.bs.tab', (e) ->
window.location.hash = e.target.hash.replace '#', '#' + prefix
또는 JavaScript:
var hash, prefix;
hash = document.location.hash;
prefix = 'bar_';
if (hash) {
$('.nav-tabs a[href=' + hash.replace(prefix, '') + ']').tab('show');
}
$('.nav-tabs a').on('shown.bs.tab', function(e) {
window.location.hash = e.target.hash.replace('#', '#' + prefix);
});
이것은 부트스트랩 3에서 작동합니다.
하지만 원본 솔루션에 대한 @tomaszbak 덕분에 편집이 거부되었고 그의 게시물에 대해 언급할 수 없지만 조금 더 개선되고 읽기 쉬운 버전을 여기에 남길 것입니다.
기본적으로 동일한 작업을 수행하지만 그의 브라우저 간 호환성 문제를 해결하면 됩니다.
$(document).ready(function(){
// go to hash on window load
var hash = window.location.hash;
if (hash) {
$('ul.nav a[href="' + hash + '"]').tab('show');
}
// change hash on click
$('.nav-tabs a').click(function (e) {
$(this).tab('show');
if($('html').scrollTop()){
var scrollmem = $('html').scrollTop(); // get scrollbar position (firefox)
}else{
var scrollmem = $('body').scrollTop(); // get scrollbar position (chrome)
}
window.location.hash = this.hash;
$('html,body').scrollTop(scrollmem); // set scrollbar position
});
});
다음은 다음을 사용하는 옵션입니다.history.pushState
브라우저 기록을 사용하여 이전 탭으로 돌아갈 수 있습니다.
$(document).ready(function() {
// add a hash to the URL when the user clicks on a tab
$('a[data-toggle="tab"]').on('click', function(e) {
history.pushState(null, null, $(this).attr('href'));
});
// navigate to a tab when the history changes
window.addEventListener("popstate", function(e) {
var activeTab = $('[href=' + location.hash + ']');
if (activeTab.length) {
activeTab.tab('show');
} else {
$('.nav-tabs a:first').tab('show');
}
});
});
위의 어떤 것도 저에게 효과가 없었기 때문에, 저는 다음과 같이 작업했습니다.
- 더하다
class="tab-link"
이 기능이 필요한 모든 링크에 - 다음 코드를 Javascript에 추가합니다.
window.addEventListener('팝스테이트',함수(이벤트){tab_change();}); function tab_change(){var hash = window.location.해시;hash & & $( 'ul.nava[href="] + 해시 + '"]' .tab( 'show' ); $( '.tab-link')를 클릭합니다.(함수( e){$( 이 .tab( 'show' ); varscrollmem = $('body').scrollTop() || $('body').scrollTop();window.location.hash = 이것.해시;$( 'html, body') .scrollTop(scrollmem ); $( 'ul.nav-valua[href="] + window.location.hash + '"]' .tab( 'show' );});}
이것은 또한 jquery 및 부트스트랩을 사용할 때 실행되지 않는 매우 모호한 탭을 수정합니다.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$('.nav-tabs a').click(function (e) {
// No e.preventDefault() here.
$(this).tab('show');
});
</script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/js/bootstrap.min.js"></script>
언급URL : https://stackoverflow.com/questions/12131273/twitter-bootstrap-tabs-url-doesnt-change
'programing' 카테고리의 다른 글
내보내기-CSV 내보내기 길이만 이름이 아님 (0) | 2023.08.22 |
---|---|
git 원격 분기 추가 (0) | 2023.08.22 |
Android, ListView 불법 상태 예외: "어댑터의 내용이 변경되었지만 ListView에서 알림을 받지 못했습니다." (0) | 2023.08.22 |
도커 파일에서 다중 RUN과 단일 체인 RUN 중 어느 것이 더 좋습니까? (0) | 2023.08.22 |
노드 js 파일에서 폴더 경로 가져오기 (0) | 2023.08.22 |