道非道 非常道

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

          統(tǒng)計

          web

          天圓

          經濟 政治 軍事

          鍵康

          [ 轉 ] form的onsubmit屬性

          form的onsubmit屬性

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

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

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

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

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

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

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

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

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

          萬惡的IE!

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

          主站蜘蛛池模板: 定兴县| 丰台区| 宣武区| 宣汉县| 枣阳市| 如东县| 定结县| 沛县| 松潘县| 抚远县| 垫江县| 柳河县| 钟祥市| 三原县| 女性| 通辽市| 井冈山市| 北海市| 安岳县| 平果县| 察哈| 兴隆县| 陵川县| 孝义市| 克山县| 怀来县| 报价| 垫江县| 宁国市| 蛟河市| 丁青县| 大竹县| 恩平市| 敖汉旗| 湾仔区| 郸城县| 元阳县| 四子王旗| 双流县| 杂多县| 新河县|