[英]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 中:轉到選項 -> 內容並取消選中“阻止彈出窗口”復選框。 重新啟動瀏覽器。
瀏覽器可能會忽略alert
、 confirm
和prompt
另一個原因是,如果文檔位於具有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.