道非道 非常道

          勤思、謹言、慎行、厚積、薄發(fā)

          統(tǒng)計

          web

          天圓

          經(jīng)濟 政治 軍事

          鍵康

          [ 轉(zhuǎn) ] form的onsubmit屬性

          form的onsubmit屬性

          在對一個表單(form)進行客戶端檢驗的時候,我們已經(jīng)習(xí)慣了<form onsubmit=”return check()”>這樣的形式,如果表單沒有通過驗證,在check函數(shù)中return false就會阻止表單的提交了。

          然而,如果要動態(tài)地為一個表單添加驗證,即HTML代碼中沒有寫onsubmit,而在頁面加載后用javascript給這個form加一個handler,問題就來了。

          假設(shè)我們已經(jīng)得到了表單的DOM節(jié)點,保存在變量form中,一般這樣來給它加上handler:

          if (form.addEventListener) {
          form.addEventListener(”submit”, check, false);
          } else if (form.attachEvent) {
          form.attachEvent(”onsubmit”, check);

          但是這個check函數(shù)現(xiàn)在應(yīng)該怎么寫呢?驗證失敗時,僅僅寫一個”return false;”在Firefox中是不能阻止表單的提交的(在IE中可以),這就是為什么大家在onsubmit屬性中要寫”return check()”,而不僅僅是”check()”。

          請看ECMAScript Language Binding,其中明確地寫著,event listener沒有返回值。其實一切的根本都因為IE不支持DOM Level 2,大家都習(xí)慣了IE的return false,到了Firefox中也只是一個ugly的變通,而很少去注意正確的做法。

          下面是一個可以被動態(tài)地attach(見上面的代碼)的check函數(shù):

          function check() {
          if (e && e.preventDefault) e.preventDefault();
          return false;
          }

          在IE和Firefox中,它都可以被動態(tài)掛載為onsubmit的handler而且正常工作。

          萬惡的IE!

          posted on 2008-12-03 10:56 星期五 閱讀(608) 評論(0)  編輯  收藏 所屬分類: web 開發(fā)

          主站蜘蛛池模板: 田阳县| 饶河县| 合作市| 陆丰市| 田林县| 阿鲁科尔沁旗| 西充县| 大洼县| 淅川县| 蓬溪县| 额尔古纳市| 东至县| 崇左市| 道孚县| 营山县| 万载县| 开封市| 五寨县| 禄劝| 台北市| 越西县| 新邵县| 蛟河市| 璧山县| 仙游县| 大化| 蕲春县| 新巴尔虎右旗| 北辰区| 泰和县| 大方县| 体育| 馆陶县| 吉水县| 丹寨县| 富宁县| 拉萨市| 河池市| 荔浦县| 镇康县| 耒阳市|