接到一個問題,大概描述如下:頁面有一text文本框,有一submit類型的按鈕,輸入內容后,按回車頁面只是刷新一下,但是沒有執行創建操作。而且文件夾名有如下限制:不能和之前創建文件夾同名,且非空。jsp中的內容簡化為如下:
<form> <tr>
<td><input type="text" id="filename" /> </td>
<td><input type="submit" onclick="return addFile();" id="sub"/> </td>
</tr> </form>
其中addFile()函數會有上面提及到限制判斷,并且會返回boolean類型,當然符合條件時就返回true,不符合就返回false。理所當然當輸入內容后點擊submit按鈕會正常執行相關操作而且會正常執行限制判斷。可是奇怪的是,在IE下 在text框輸入內容后直接按回車確不能執行相關操作,只是頁面刷新了一下, 但是在FIREFOX下 按回車卻能正常執行操作和判斷。 之前第一時間就是想到應該在text文本框中加一個onkeydown的事件enter_file(),enter_file函數是當按下回車時就執行,并且函數中應該有這句代碼 document.getElementById('sub').click(); 就是說當回車時就執行submit按鈕的click操作。 貌似應該會正常執行操作的吧,可是又一奇怪問題出現了,就是在IE下,在文本框中輸入 a 后(假設之前沒有文件名為a的文件),然后快速按2下(更多下也可以),結果會跳過“不能創建重復文件名”的判斷,創建出2個相同名字a 的文件夾,而且例如輸入同名文件名后,彈出框會一閃而過,不會等點擊確認后才退出彈出框,但是在FIREFOX下卻是正常執行,也不會出現一閃而過的現象,就是快速按幾下也只是創建一個文件夾a。 之后百思不得其解,試過一些方法,比如把submit類型改為button類型,把onkeydown事件換成onkeypress或者onkeyup ,結果還是出現IE下快速按回車 創建2個同名文件夾,還是出現一閃而過的現象。
初步判斷可能是ie和ff在text框按回車的響應不同,最后上網搜了一下,找到一個帖子 名為求解一個關于回車的問題 http://topic.csdn.net/t/20061128/14/5191186.html ,具體內容到那個帖子看看。抽取其中值得注意的地方如下:
IE:
1. 只有一個text框時,(不管有沒有submit),直接觸發onsubmit (form標簽的一事件屬性)
2. 有多個text框時,觸發submit上的onclick,其默認行為為觸發onsubmit。
相對來說,ff的行為最復雜。
1. 有submit或button時,觸發submit或button的onclick,然后該onclick的默認行為會觸發onsubmit。
2. 沒有submit或button時,
2.1 只有一個text框時,觸發onsubmit;
2.2 有多個text框時,不觸發onsubmit。
因為看到當只有一個text框時,直接觸發onsubmit,就聯想到要在form標簽中加上onsubmit事件,于是把上面的代碼改為如下:
<form onsubmit="return addFile()"> <tr>
<td><input type="text" id="filename" /> </td>
<td><input type="submit" id="sub"/> </td>
</tr> </form>
結果在IE下終于能成功操作,即是快速按幾下也只是創建一個文件夾,并且不在出現一閃而過的現象。 因此很多時候在IE下可能出現奇怪問題,換作FF下就沒問題了,Firefox支持JavaScript是正宗的。另外用firefox的插件 firedebug 來調試 javascript 程序 簡直太爽了。