剛好正在做 dashboard 右上角有關登入角色資訊,點擊後會有下拉選單可以點選一些資料或登入的操作,正在試做時發現原則上網頁產生過程是沒問題的,但就是那個資訊要點出下拉選單時,第一次點擊總是沒有反應,第二次以後的操作都正常…狀況如下
可以看到我第一次點「管理者」時,底色是有變暗,這代表我有「click」下去,但下方的選單沒有展開,第二次再點就正常…使用 chrome 的「開發人員工具」看反饋資訊,console 是沒有報錯的。
然後在網路上搜尋「bootstrap 4 dropdown twice click」的相關資訊,發現是有一樣狀況的,也有回應的人寫說可以增加「data-target="id"」在那個要被點的屬性中,「id」可以建立在「dropdown-menu」的東西的屬性中,如下:
<nav class="navbar navbar-expand-lg navbar-expand-md"> <div class="collapse navbar-collapse"> <ul class="navbar-nav"> <li class="dropdown"> <a href="#" class="dropdown-toggle h6" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="color: white;" data-target="#drop"> 管理者 </a> <div id="drop" class="dropdown-menu" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="profile.html">Profile</a> <a class="dropdown-item" href="login.html">Logout</a> </div> </li> </ul> </div> </nav>
我標紅色字的就是我上面寫的,這樣做是第一次點擊會正常,但…點出來後的選單就無法再用點擊叫它消失,只能在網頁其他地方點一下才會取消 focus 狀態…解決一個又產生一個問題。
然後再繼續 google 看文,我發現了有幾個人的回答都是說「可能是多次載入了 bootstrap.js 的關係,所以這個一些功能產生了衝突」!!!呃,我很確定 bootstrap.min.js 我只載入了一次,我並沒有多次或我把 bootstrap.js 也載入了呀…不過我看到我有多載了 bootstrap.bundle.min.js 。
我後來就去找了「bootstrap」跟「bootstrap.bundle」有啥差別,在「這邊」有說明,原則上兩則在「核心」是一樣的,只是「bootstrap.bundle」並沒有包進「popper.js」的程式碼,「popper.js」是一個不需要 jQuery 就能完成 tooltip 的輕量程式,所以,原來我的問題確實是「重複載入 bootstrap 而造成衝突」。
解決了!!!
10 則留言:
感謝解惑!!!
不用客氣
感謝
太神奇了傑克!
@Unknown
不用客氣
謝謝大大,遇到相同問題,用您提出的方法排除了,謝謝。
@匿名
不用客氣,能解決問題才是最好的,謝謝你來到我的blog。
非常感謝!!!! 改成data-target就好了!
@Sunbeam
不用客氣,有幫到忙就好。
狐狸大大您好
我最近也遇到了類似的問題
只是我是使用Collapse(摺疊)而不是Dropdown
我是用MasterPage載入這些東西
<link rel="stylesheet" href="POSQues/MeasureCSS/bootstrap/css/bootstrap.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
再用Content去取這個MasterPage來使用這樣子
進去該Content頁面時點擊Collapse的a標籤會自動折疊後打開並畫面閃爍一下
之後繼續點擊該標籤才會正常的折疊跟打開
但如過這時再去點擊其他的圖片按鈕
然後回來點擊這個a標籤他又會出現一樣的問題(要點第二次開始才能正常摺疊打開)
我有試過加上data-target跟設id
但還是沒有解決
想請問你講的多載了bootstrap.bundle的部分
解決辦法是把名稱有bundle的檔案都刪除嗎?
還是其實是我上面link或者script的部分多載了呢
如果方便的話希望可以幫我解惑 打擾您了 謝謝
TO 程式老菜鳥
應該是說,在下這例子是我在一個網頁裡,在載入 script 的地方,載入了 bootstrap.min.js 和 bootstrap.bundle.min.js
而如在下文章所述,其實 bootstrap.min.js 和 bootstrap.bundle.min.js 兩個只要選一個載入就好
只是,如果選擇的是 bootstrap.bundle.min.js,那最好還要另外載入 popper.js,因為 bundle 的本身少了 popper.js
而以你的狀況,我覺得你可以試著把 popper.min.js 給刪除看看這樣會不會正常
若你的需求是 popper.js 是一定要的話,你可以試著把 jquery 改成 slim 的版本
若是再不行…就只能看你的code怎麼寫的了,如果你可以在 codepen 或 jsfiddle 重現你的問題的話,那再麻煩你給在下連結,在下再來幫你除個蟲看看
張貼留言