為什么這么說呢?且看下面的情形:
當用戶焦點在輸入框中的時候,當用戶按了“Enter”鍵之后,達到點擊登錄的效果;所以這里就監聽了input的keydown事件,當keyCode是13的時候,就發送請求或者觸發登錄按鈕的click事件。
在其他瀏覽器中都沒有問題,但是在IE中,當我按了Enter之后,確實是請求了,但是同時也觸發了下面“微博”按鈕的click事件。百思不得姐啊!!
首先大概看下頁面結構:
為什么會那樣呢,猜測下:是不是因為當按下Enter鍵的時候,瀏覽器的焦點就自動跳到下一個“可用”button上呢,並且Enter了,只有這樣才會解釋上面的情況。下面就驗證下::
1、我現在焦點在第一個賬號輸入框中,然后敲下Enter鍵,推測下應該是跳到登陸按鈕上,有圖有真相,
可見此時的this就是指向的登陸,OK驗證成功。
2、僅僅靠1上的驗證,還不足夠,下面咱們就把焦點設在密碼框中,按下Enter鍵,看看什么情況
可以看到的是在48行的地方,咱們設置了登陸按鈕不可用,所以下一個可用button就是“微博”了,所以會觸發微博按鈕的click事件。
所以,猜測是合理的。
3、為什么說是Button呢,如果是a標簽呢,我也做了實驗,a標簽是不會有這樣的問題的,只有button會有,這里不再細說。
4、那該怎么解決呢?其實解決辦法還是挺多的,比如可以把button換掉;我采用的是阻止keydown事件的默認行為preventDefault;的確解決問題。
OK,到此結束;歡迎吐槽!
// 后記:默認button是有type類型的 需要指定type=“button”等...所以這個問題是沒有加type導致的。。