【问题标题】:Bootstrap ajax tab reload on select form change选择表单更改时引导 ajax 选项卡重新加载
【发布时间】:2018-11-17 23:19:25
【问题描述】:

我有带有动态加载内容的引导选项卡,它工作正常。但是我需要在选择国家后重新加载标签(类似于 a.replace( /countryId=[^&]*/ig, 'countryId='+o.target.value) )。谁能帮我?谢谢你

   $('#maps a').click(function (e) {
        e.preventDefault();

        var url = $(this).attr("data-url");
        var href = this.hash;
        var pane = $(this);

        $(href).load(url,function(result){      
            pane.tab('show');
        });
    });

    $('#cities').load($('.active a').attr("data-url"),function(result){
        $('.active a').tab('show');
    });

...

<select id="country-select">
    <option value="FIN">Finland</option>
    <option value="CAN">Canada</option>
    <option value="RUS">Russia</option>
    <option value="SVK">Slovakia</option>
    <option value="SWE">Sweden</option>
    <option value="USA">USA</option>
</select>

<ul class="nav nav-tabs" id="maps">
    <li class="nav-item active">
         <a class="nav-link active" data-toggle="pill" href="#cities" data-url="map.jsp?show=cities&countryId=FIN">Cities</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-toggle="pill" href="#mountains" data-url="map.jsp?show=mountains&countryId=FIN">Mountains</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-toggle="pill" href="#rivers" data-url="map.jsp?show=rivers&countryId=FIN">Rivers</a>
    </li>
</ul>
<div class="tab-content">
    <div class="tab-pane container active" id="cities">
        <div style="text-align: center; margin-top: 3rem;">
            <img src="images/loading.gif" alt="Loading..."/>
        </div>
    </div>
    <div class="tab-pane container fade" id="mountains">
        <div style="text-align: center; margin-top: 3rem;">
            <img src="images/loading.gif" alt="Loading..."/>
        </div>
    </div>
    <div class="tab-pane container fade" id="rivers">
        <div style="text-align: center; margin-top: 3rem;">
            <img src="images/loading.gif" alt="Loading..."/>
        </div>
    </div>
</div>

共有三个标签,第一个标签有城市列表,第二个标签有山脉列表,第三个标签有河流列表。从下拉菜单中选择一个国家后,我需要显示这个国家的城市/山脉/河流。

【问题讨论】:

    标签: jquery bootstrap-tabs


    【解决方案1】:

    您可以使用URL API 来使用URL.searchParams.set() 使用新的国家/地区代码更新data-url 属性,而不是字符串操作

    var $tabLinks = $('#maps a')
    
    function updateCountryId(countryId) {
      var baseUrl = location.href;
      // loop over tabs links and update `data-url`
      $tabLinks.each(function() {
        var $a = $(this);
         // new URL object 
        var url = new URL($a.data('url'), baseUrl);
         // update countryId param
        url.searchParams.set('countryId', countryId);
        // update data attribute
        $a.attr('data-url', url.href)
    
      });
    }
    
    $('#country-select').change(function() {
      updateCountryId($(this).val())
      $tabLinks.first().click()
    });
    
    // demo click handler just to log url. Your current one should need no changes
    $tabLinks.click(function() {
      console.log($(this).attr('data-url').replace('https://stacksnippets.net/',''))
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <select id="country-select">
      <option value="FIN">Finland</option>
      <option value="CAN">Canada</option>
      <option value="RUS">Russia</option>
      <option value="SVK">Slovakia</option>
      <option value="SWE">Sweden</option>
      <option value="USA">USA</option>
    </select>
    
    <ul class="nav nav-tabs" id="maps">
      <li class="nav-item active">
        <a class="nav-link active" data-toggle="pill" href="#cities" data-url="map.jsp?show=cities&countryId=FIN">Cities</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="pill" href="#mountains" data-url="map.jsp?show=mountains&countryId=FIN">Obránci</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="pill" href="#rivers" data-url="map.jsp?show=rivers&countryId=FIN">Obránci</a>
      </li>
    </ul>

    【讨论】:

    • 它有效,谢谢。但是当我改变国家时没有微调器。有什么方法可以添加吗?我试过 beforeLoad: function( event, ui ),但我不知道该怎么做。如果我在网站上有五个选项卡列表,我是否必须有五个 updateCountryId 函数?有什么方法可以执行函数 updateCountryId(id-of-tabs-ul, countryId)?
    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多