道非道 非常道

          勤思、謹言、慎行、厚積、薄發

          統計

          web

          天圓

          經濟 政治 軍事

          鍵康

          [ 轉 ] form的onsubmit屬性

          form的onsubmit屬性

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

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

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

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

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

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

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

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

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

          萬惡的IE!

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

          主站蜘蛛池模板: 蒙城县| 西吉县| 苍梧县| 双峰县| 灵寿县| 通榆县| 定兴县| 萨迦县| 隆子县| 肥东县| 民丰县| 固镇县| 陇川县| 邢台市| 福鼎市| 永寿县| 达尔| 奉化市| 云霄县| 永城市| 古丈县| 雅安市| 贵阳市| 共和县| 日喀则市| 锦屏县| 林周县| 广东省| 涟源市| 开鲁县| 阳原县| 深圳市| 竹溪县| 昌图县| 汤原县| 城固县| 河西区| 永泰县| 榆林市| 民和| 遂平县|