簡體   English   中英

Javascript:為什么有時 alert() 不起作用但 console.log() 起作用?

[英]Javascript: Why sometimes alert() does not work but console.log() does?

有時,我會遇到一個非常有趣的錯誤。 我的 javascript 代碼在執行期間不顯示警報(消息),但如果我使用 console.log(msg),它會顯示在控制台中。 什么可以阻止 alert() 顯示?

非常感謝

這是一個非常普遍的問題,每個人都至少遇到過一次這個問題。 alert() 不起作用的原因是之前您已選中“防止此頁面創建其他對話框”復選框。

讓我們來看看這段代碼。

<script type="text/javascript">

var js_name = ['elem1', 'elem2']

 for (var i = 0; i < js_name.length; i++) {
    alert(js_name[i]);
 };

</script>

如果您運行代碼,將會有兩個警告框。 如果您選中“阻止此頁面創建其他對話框”復選框,然后再次刷新頁面,您將不會再收到警告框。

解決方案是您需要關閉該網頁並在瀏覽器中重新打開(不需要關閉整個瀏覽器)。 我假設您使用的是 chrome。 Internet Explorer 或 FireFox 沒有此復選框功能。

如果您覆蓋警報功能,則它將無法正常工作

alert = function() 
{
 ...
};

alert('hello') // won't show any alert

據我所知,alert() 總是會顯示,除非它是重復的,在這種情況下,系統會詢問您是否要繼續顯示警報。

我想如何處理的具體細節取決於您的瀏覽器。 願意分享更多細節嗎? :)

這也發生在 ColdFusion 中。 如果在腳本標記之后的任何地方使用 cflocation 標記(而不是 location.href),警報將不會顯示。

如果您打開了開發工具並啟用了響應式設計模式,這也可能發生在 Firefox 中。 這聽起來像是一個錯誤

在 Firefox 中:轉到選項 -> 內容並取消選中“阻止彈出窗口”復選框。 重新啟動瀏覽器。

瀏覽器可能會忽略alertconfirmprompt另一個原因是,如果文檔位於具有sandbox屬性的iframe ,而其值中沒有allow-modals

例如,Firefox 會默默地忽略這一點,但 Chromium 會顯示警告。

如果您嘗試在 Chrome 瀏覽器地址 URL 中執行 javascript 警報功能,如果該選項卡之前沒有加載頁面,您將不會收到消息。 只有當它不是新標簽時,您才會收到警報框。 如果存在之前加載的網頁,然后嘗試在地址欄中運行javascript,您將獲得預期的結果。 希望它能澄清 Chrome 中這種難以檢測的行為。

如果您在 alert() function 之后有一個 location.reload() ,如下所示,JavaScript 會以某種方式跳過警報並重新加載頁面。

     $.ajax({
            url:'xxx',
            type : 'POST',
            data : datavalues,
            dataType: 'json',
            contentType: 'application/json',
            success: function(response){
                if(response.status == '200')
                    {
                    alert("updated");
                    }
                    
            }
        });
     
     location.reload();

為了解決這種情況,我將重新加載 function 移到了 if 塊中,這解決了問題。

    $.ajax({
        url:'xxx',
        type : 'POST',
        data : datavalues,
        dataType: 'json',
        contentType: 'application/json',
        success: function(response){
            if(response.status == '200')
            {
                alert("updated");
                location.reload();
            }

        }
    });

 

我在這里有一個類似的問題,當我用“警報”替換控制台日志時,它不起作用,但console.log確實起作用。

不工作的代碼是:

request(options, function(error, response, body) { // Requesting API

    var statusCode = response.statusCode;

    if(statusCode === 200){
      alert("Success");
    } else {
      alert(error);
    }

工作代碼是:

request(options, function(error, response, body) { // Requesting API

    var statusCode = response.statusCode;

    if(statusCode === 200){
      console.log("Success");
    } else {
      console.log(error);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM