關於abp中使用的sweetalert對話框組件的confirm確認對話框中的一個坑的解決過程

来源:http://www.cnblogs.com/csharpweb/archive/2017/07/21/7216372.html
-Advertisement-
Play Games

今天修改了一個功能,限制刪除用戶,在刪除的時候不滿足條件的時候提示用戶原因,使用的sweet alert組件。 abp框架前端集成了sweet alert 對http請求的error做了全局處理,我在後臺程式直接拋出的UserFriendlyExcption,開始的時候發現能提示,然後再次操作發現沒 ...


今天修改了一個功能,限制刪除用戶,在刪除的時候不滿足條件的時候提示用戶原因,使用的sweet alert組件。
abp框架前端集成了sweet alert 對http請求的error做了全局處理,我在後臺程式直接拋出的UserFriendlyExcption,開始的時候發現能提示,然後再次操作發現沒顯示提示了,
卧槽,一臉懵逼啊,哪裡的問題啊,趕忙把代碼從頭到尾檢查一遍沒問題啊,然後測試其他有這種錯誤提示的地方,發現沒問題啊,都有提示的,就只有這裡出現問題。。。
那就調試吧,在abp.ng.js源文件中打了一個斷點調試,然後操作一步一步走,結果發現sweet alert是顯示出來了的,只不過又馬上被隱藏了。

具體的sweet alert的elements如下:

<div class="sweet-alert showSweetAlert visible" tabindex="-1" data-custom-class="" data-has-cancel-button="false" data-allow-ouside-click="false" data-has-done-function="true" data-animation="pop" data-timer="null" style="display: none; margin-top: -190px; opacity: -0.06;">
    <div class="icon error animateErrorIcon" style="display: block;"><span class="x-mark animateXMark"><span class="line left"></span><span class="line right"></span></span></div>
    <div class="icon warning" style="display: none;"> <span class="body"></span> <span class="dot"></span> </div> 
<div class="icon info" style="display: none;"></div>
 <div class="icon success" style="display: none;"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div>
 <div class="icon custom" style="display: none;"></div> <h2>您不能刪除該當班用戶,請等待用戶交班後再進行刪除!</h2><p style="display: block;"></p><button class="cancel" tabindex="2" style="display: none; box-shadow: none;">Cancel</button><button class="confirm" tabindex="1" style="background-color: rgb(174, 222, 244); box-shadow: rgba(174, 222, 244, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px inset;">Ok</button></div>

一看div容器的class是visible,表示是顯示了的,只不過是style上的display為none,被隱藏了,又是一臉懵逼,想到難道是其他地方的代碼直接修改了div的行內樣式?但是仔細一分析也不對啊,其他地方的代碼又沒有專門對sweet alert的elements修改,就算是有代碼使用的div選擇器那麼修改的也是頁面所有的div,而不會僅僅是sweet下的div。
這樣看來應該還是sweet alert組件自己修改的,為了確認這個問題,在瀏覽器elements選卡下 選中sweet alert的elements,使用 break on功能進行調試,經過幾次操作發現確實是sweet alert自身修改的樣式。

問題確認那麼就找找是哪裡觸發的,通過連續的操作,仔細觀察,發現在sweet alert confirm確認對話框關閉的過程中,後臺處理已經處理完成直接彈出sweet alert的提示框了,然後confirm關閉的時候直接把提示對話框也關閉了。

我了割草,終於發現問題了,因為sweet alert所有的對話框,提示框都是公用的一塊elements,所以兩個提示框不能同時出現,不然就會出現混亂。
找到問題點了,處理起來就簡單了,找到abp.sweet-alert.js文件,找到abp.message.confirm函數修改最後的return部分代碼:

        return $.Deferred(function ($dfd) {
            sweetAlert(opts, function (isConfirmed) {
                callback && callback(isConfirmed);
                $dfd.resolve(isConfirmed);
            });
        });

改為:

        return $.Deferred(function ($dfd) {
            sweetAlert(opts, function (isConfirmed) {
                setTimeout(function () { callback && callback(isConfirmed); },300);
                $dfd.resolve(isConfirmed);
            });
        });

使用settimeout函數,延遲300毫秒去執行callback回調函數,這樣就不會衝突了。
修改這地方是為了統一處理confirm對話框的情況,也可以直接修改調用confirm的地方,callback函數裡面使用settimeout延遲執行業務操作,只不過這樣只能處理一處,非特殊情況建議還是直接修改abp.sweet-alert.js。
至此,問題完美解決。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前段時間老是直接貼代碼,什麼都沒有,發現這樣長期下來不行。雖然以後可能不會看,但是萬一需要它就不能很好的起到提示作用。此後儘量把代碼詳細化,簡單化 package chapter11AWT; import java.awt.BorderLayout;import java.awt.Button;im ...
  • 我投的崗位“軟體研發工程師”。到了面試現場,選擇了Java語言(有對應的面試官)。不過,後面進行了交叉面試,被推到了“數據研發”崗位。 一面: 首先,自我介紹。我:“我做過兩個項目。寫過幾篇論文和專利。還參加過阿裡巴巴大數據競賽。同時,出於個人興趣,我還閱讀了一下HDFS的少部分源碼,理解了一下HD ...
  • java 對float和double類型存在著精度丟失的情況 二進位表達小數存在著表達不了的情況,因為float和double的位數是有限的,但存在在著無限迴圈的二進位數,就如10進位表達不了1/3一樣。 Java使用BigDecimal來精確計算 BigDecimal的構造方法 這裡需要註意的是B ...
  • 前言 最近看了看Apache Flume,在虛擬機里跑了一下flume + kafka + storm + mysql架構的demo,功能很簡單,主要是用flume收集數據源(http上報信息),放入到kafka隊列里,然後用storm消費kafka里的資源,計算結果並存入到mysql中; 在這期間 ...
  • 程式員的核心技能之一就是演算法,談到演算法,似乎都是從排序開始。對一組已知範圍的數據進行排序,最快的演算法是什麼呢?快速排序?希爾排序?非也,非也~是本文的主角“桶排序”! 來看一個實際例子吧:已知一組範圍在0~10的數據(如:9,5,2,7,7),你有沒有什麼好方法編寫一段程式,將數據從大到小輸出呢? ...
  • "DDD理論學習系列——案例及目錄" 1.引言 在針對大型的複雜領域進行建模時,聚合、實體和值對象之間的依賴關係可能會變得十分複雜。在某個對象中為了確保其依賴對象的有效實例被創建,需要深入瞭解對象實例化邏輯,我們可能需要載入其他相關對象,且可能為了保持其他對象的領域不變性增加了額外的業務邏輯,這樣即 ...
  • 本篇為繼上一篇的續篇,主要內容分為以下幾點: 1、zookeeper集群 2、web管理平臺 3、dubbo配置說明 接下來我們開始繼續吧。 一、zookeeper集群 顧名思義也就是多台zookeeper服務以及多台伺服器共同協作。 在上一篇中我們已經把dubbo-consumer工程實現了,我們 ...
  • var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana"}, {"id":"4","tagName":"watermelon"}, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...