2010-10-27 70 views
1

我正在着手編寫一個jquery插件,它需要輸入元素,textareas,選擇html元素等一系列輸入元素,並且一旦在上述任何一箇中按下回車鍵項目,一個輸入按鈕被觸發。因此,按鈕被設置爲字段的默認值。這樣做的任何提示?用jquery插件在html元素上設置默認按鈕

+0

你在找什麼樣的「技巧」? – 2010-10-27 23:28:38

+0

HTML文本輸入表單元素中的Enter鍵的默認行爲是觸發第一個「提交」按鈕。 – Phil 2010-10-27 23:31:54

+0

@Phil Brown我不認爲他們都這麼做。 textarea的,一個。 – alex 2010-10-27 23:35:57

回答

6

表單中的第一個input type="submit"/"image"/button type="submit"是'默認'提交按鈕。

如果您想作爲默認按鈕的按鈕不應該先出現在頁面上,然後用例如。浮動或定位。或者,如果這不可行,只需在表單中首先使用一個額外的虛擬提交按鈕,使用position: absolute; left: -lots即可使其無法看到。 (您可以使用tabindex以正常的Tab鍵順序停止;不要使用display: nonevisibility: hidden,因爲在某些瀏覽器中會停止默認按鈕。)從form.onsubmit事件中捕獲默認按鈕/提交操作以及他們自己的onclick事件中的任何其他非默認按鈕。

這是一個醜陋的黑客,它確實很可惜,HTML沒有辦法自然地改變默認按鈕,但是在這裏利用本機瀏覽器的行爲比試圖用腳本代替它更好,比你想象的更復雜。有很多有趣的小瀏覽器行爲可能會讓你感到沮喪。

例如,如果您決定按Enter鍵,則可能會收到使用IME的用戶不需要的輸入事件。在input type="button"textarea上輸入按鍵通常不應觸發提交。除非使用鍵盤導航下拉菜單(並且無法可靠地分辨何時發生這種情況),否則請在select上輸入按鍵。如果表單中的非字段元素獲得焦點並按下Enter,會怎麼樣?你不會捕獲它,並且在某些瀏覽器中,這將導致表單提交,而無需您的代碼干預,無論如何都會以默認按鈕結束。 Shift-Enter或Ctrl-Enter是否意味着在文本字段中提交?在文本區域?在複選框上輸入確認,提交表格或兩者? ...

瀏覽器在這裏有許多微妙的不同行爲;你會瘋狂地試圖掩蓋每一個小小的可能性,無論你決定什麼都可能會違背用戶的預期行爲。讓瀏覽器正常的默認表單提交代碼來處理它。

+0

+1給你,並刪除我... – alex 2010-10-28 00:09:28