2013-12-03 42 views
4

我需要在某些情況下通知用戶,並且看到不應使用confirm()和alert()。相反,很多問題都提到了在jQuery UI中使用模態的東西,特別是如果您需要樣式化的話。這一切都很好,但是,在一天結束時,編碼人員說你應該遠離它的原因是什麼?爲什麼我不應該在JavaScript中使用Alert?

This是人們感覺如何的一個很好的例子,但幾乎任何其他處理樣式警告框的問題都有相同的註釋。這只是一個造型問題,還是有更多的根本原因來回避這種內置功能?

更重要的是,沒有一個答案談論你應該用什麼來代替。 jQuery UI和類似的預構建解決方案只是唯一的答案嗎?爲什麼?是否需要易於使用的性能或安全性或缺乏經驗的編碼人員或......?

編輯:

好了,所以讓我澄清一下。我問的原因是因爲警報功能是爲了防止用戶意外清除他們一直在做的工作,因爲有三種方法在此頁面上啓動新計劃,並且每個清除現有的內部html div顯示計劃的位置。

我聽到的大部分內容都是對用戶和用戶界面不利,但是,如果引起憤怒,注意力集中在我想要的內容上,我應該怎麼用?有人提到警報/確認會停止JavaScript執行,並可能阻止您使用其他選項卡。這更接近我期待的功能問題。我明白這對UI有壞處,但我在這裏尋找更多的技術原因。

+5

請參閱http://programmers.stackexchange.com/questions/106031/javascripts-prompt-confirm-and-alert-considered-old-fashioned/106039#106039和http://ux.stackexchange.com/questions/ 12884 /下降在JavaScript的提示使用 – JJJ

+2

試試這個鏈接:http://stackoverflow.com/questions/8825384/alert-is-bad-really – jpodwys

+0

這是驚人的快。謝謝,夥計們,我現在就去看看那些。 –

回答

7

沒有「技術原因」您不應該使用內置的瀏覽器方法進行警報和確認功能。這都是有見地的。

讓我們分成兩部分。

警報不應該被用於調試除非你想讓它停下來的目的代碼的執行。否則,您應該使用console.log,因爲如果代碼涉及異步邏輯,alert實際上可以更改代碼的結果。 「但是在IE中不支持console.log!」是的,如果控制檯是打開的。在生產代碼中,你的調試代碼不應該在那裏。爲了防止被遺忘的console.logs,只需對它進行polyfil。對於調試以外的用途,比如通知用戶發生了什麼事情,通常最好使用其他方式通知用戶發生了變化,例如突出顯示帶有信息文本的元素或橫幅,但是沒有任何內容錯誤在這種情況下使用警報,只要暫停執行不會影響您的代碼。

確認是詢問用戶的標準方式「你確定嗎?」在執行諸如刪除信息之類的破壞性操作之前。這很容易理解,並被許多網站使用,所以我建議在你自己的代碼中使用它。另一種方法通常會導致額外的代碼爲應用程序增加不必要的複雜性。請記住,但是,確認也會阻止執行,因此您應確保它不會影響您可能正在運行的任何異步邏輯。

如果您的異步代碼編寫正確,它通常不會受到執行暫停的影響。

+3

Alert對於調試會導致頁面刷新或重定向的內容特別有用,因爲它不會消失,並且頁面在您單擊確定之前不會重定向。當然,控制檯也有一些工具可以在一些瀏覽器中解決這個問題。 –

+0

非常真實!從我在網上閱讀的內容來看,這基本上是我所得到的,但我無法在任何地方找到證實的地方。謝謝!就我而言,這不是真的,但讓我們暫時假定你不想停止執行,你想用什麼來代替?我認爲jQuery UI爲屏幕創建了一個div覆蓋層,爲什麼這可能是首選? –

+1

疊加層強制用戶以與警報暫停執行相同的方式與對話進行交互,以強制用戶與警報交互。 –

2

提醒塊JS執行。它很醜。它的功能有限。

它更好地使用模式對話框和回調來處理用戶的選擇。有很多圖書館都做得很好。

+0

好的,但是爲什麼?這回答了問題的一部分,但是爲什麼/如何在模態對話框和回調之類的事情沒有的情況下阻止JS執行? –

+3

爲了扮演魔鬼的擁護者,阻止js的執行有時可能是需要的。 –

+0

而且,當我添加到上面的編輯中時,在這種情況下實際上是這樣。 –

0

從設計角度考慮它。最終用戶討厭彈出窗口,並且提示/警告/確認非常像「垃圾」一樣(被濫用)。 Modal窗口更「溫和」(正如我的教授所說的),可定製,並且比警報更時尚。

更不用說太多的彈出窗口可能觸發一些瀏覽器提供的「檢查此處禁用來自本網站的警報」。

+0

是的,我明白這一點。如果這是面向客戶的情況,並且每5-6個月使用一次以上,那麼在UI上花費大量時間會更容易。我更想弄清楚他們的仇恨是從哪裏來的。你認爲這主要是因爲這個? –

+3

我認爲這主要是因爲許多開發人員錯誤地將其用於調試,導致誤報,例如認爲需要警報才能使ajax請求有效,但實際上因爲邏輯錯誤而無法工作。 –

+0

^這麼嚇人真的 –

2

這裏有一些原因,你應該不是在你的代碼中使用警報:

  • 正如你所說,很多警報框可能惹惱用戶的警告框
  • 造型,據我知道不可能。而且每一個瀏覽器顯示出來指出錯誤,這可能不看在你的網站設計
  • 大多數現代/常用瀏覽器阻止提醒所有的情況下良好的售後服務站點試圖顯示他們幾個,以防止警報垃圾郵件

您可以使用jQuery UI對話框作爲替代,或者其他任何能夠顯示模式對話框的對話框。 這樣你可以自定義/設置對話框的樣式,瀏覽器不會阻止它們。

我通常只使用警報框來進行調試/錯誤報告,而不是更多。

+0

*「我通常只使用警報框來進行調試/錯誤報告,而不是更多。」*這是我唯一認爲不應該使用它們的唯一地方。 –

+0

爲什麼?所以你告訴我你在其他地方使用警報?我發出警報的唯一地方是ajax請求的內部錯誤事件,並且不僅僅當沒有加載jquery時可以使用內置的錯誤樣式顯示錯誤消息。 – RononDex

+1

改爲使用console.log(),調試速度要快得多。警告調試是非常糟糕的做法IMO –

相關問題