一、背景
話說今天在調試js的時候,碰到一個很奇怪的問題,現記錄一下。當使用alert()函數彈出提示時,總是報錯,你沒看錯,alert函數報錯了。
二、詳細說明
當時正在做一個關於告警的頁面展示功能,其中一段js為:
function search(){ var startTime=$("#startTime").val(); var endTime=$("#endTime").val(); if(startTime==null || startTime.trim()==""){ alert("查詢開始時間必須填寫!") return; } if(endTime!=null && endTime.trim()!=""){ if(endTime<=startTime){ alert("查詢結束時間必須大於查詢開始時間"); return; } } show(startTime,endTime); }
就是普普通通的彈出提示功能,但是每當要彈出的時候總是報錯,通過火狐的firebug查看,報錯如下:
當時我就蒙了,alert不是js最基本的方法嗎,怎么告訴我不是一個函數呢?
三、解決過程
我一看,這個現象已經超出了我的認知范圍,那是指定解決不了(其實偷偷解決了老半天),只能去百度,可是一個答案都沒有。這時候我已經陷入深深的絕望了,距離問題發現已經一個多小時了,看來不得以只能拿出梯子上牆了,果然找到問題的根源了,網友提醒說alert是不是被重新定義了!!!,我一聽就秒懂,我正在做告警的頁面,會不會有的變量定義為alert了呢,回去趕緊搜索一下,果不其然找到了:
//原始事件量 var orgEvent = echarts.init(document.getElementById('orgEvent')); //事件量 var event = echarts.init(document.getElementById('event')); //告警量 var alert = echarts.init(document.getElementById('alert'));
多么痛的領悟,這種事居然都能發生在我身上,重命名后問題就解決了。
四、痛定思痛
單就這個問題收獲點什么:
- 當一個你認為絕對不會發生的問題發生了,不要總在心里默念不可能,不可能,這會降低你解決這個問題的智商。
- 當應該出現某種結果的時候,發生意外了,這時候應該從最基本的開始找起,拼寫錯誤、路徑錯誤、字母大小寫等等
- 必然發生的事沒發生,那么中間肯定發生了什么,就像這個例子中,alert做為一個函數必然應該彈窗,結果報錯說不是函數,那么肯定被更改了