在瀏覽器中填寫表單的時(shí),可以直接在“文本框”中敲擊“Enter”來(lái)提交表單,很是方便。條件是:
在IE和Firefox下
1、<form>屬性的“action”字段必填;
2、有一個(gè)type="submit"的“input”。
在Chrome和Safari下
滿足第一條即可。(注釋1)
所以,如果要控制提交行為的話(比如,提交前檢查必填項(xiàng)是否已填),可以在type="submit"的“input”后添加Javascript“onXXX(比如onClick)”事件。而如果需要用異步交互來(lái)檢測(cè)相關(guān)字段,則無(wú)效了。因?yàn)閞eturn false是作為onreadystate=的子函數(shù),并不能控制全局。這時(shí)就需要用到<form>的“onsubmit”屬性(注釋2)。比如:
HTML
1 <form name="form1" id="form1" action="act.php" method="post" onsubmit="myfn();return false;">
myfn()是自己定義的函數(shù):無(wú)論通過(guò)什么辦法(比如敲擊“enter”或點(diǎn)擊type="submit"(而不是type="button")的“input”按鈕)提交,都會(huì)觸發(fā)這個(gè)這個(gè)函數(shù)。于是,大可不必再在type="submit"的“input”后添加Javascript事件“onXXX”了。直接在“onsubmit”中控制,更直觀與統(tǒng)一,除非有意控制提交方式(是onClick還是什么)。
return false位于末尾,表示不提交本表單。提交表單的字句document.form1.submit()可以作為myfn()的一個(gè)選擇條件的分支。
總結(jié):
這樣,<form>有“action”和“onsubmit”屬性,有type="submit"的“input”的提交按鈕后,就可以在任何瀏覽器下(不行嗎?請(qǐng)給我反饋)實(shí)現(xiàn)使用“Enter”鍵和鼠標(biāo)都可以對(duì)表單的相關(guān)字段進(jìn)行異步(Ajax)和同步(單純的Javascript)檢查并予以提交。
其他:
1、如果使用type="button"來(lái)異步檢測(cè)相關(guān)字段呢?
這樣,這個(gè)“input”必須得有一個(gè)事件觸發(fā)器。在IE和FF下,無(wú)法直接在文本框中按下“Enter”來(lái)提交表單。如果要的話,需要使用額外的函數(shù)來(lái)監(jiān)聽(tīng)用戶按下了什么,給出一個(gè)怎樣的反映(注釋3)。更糟糕的是,在Ch和Sa下,會(huì)忽略是否有type="submit"按鈕,而直接根據(jù)“action”屬性來(lái)提交表單,如此以來(lái),便無(wú)法實(shí)現(xiàn)預(yù)期的檢測(cè),可能還有更麻煩的后果。
2、如果不寫“action”屬性,直接異步提交表單呢?
這樣,通過(guò)異步的方式提交表單,而不僅僅是檢測(cè),這個(gè)屬性則沒(méi)有必要。而且還是多余。假如這樣能提供更好的用戶體驗(yàn),何樂(lè)而不為呢?呵呵。
【注釋】
1 在IE8,F(xiàn)F,Ch中測(cè)試有效。Opera和Sa沒(méi)有測(cè)試。參考了這篇文章