HTML Form issue

來源:互聯網
上載者:User

因相容DOM0的關係,form被設計成支援直接可通過name直接access到control。例如如有一個<input name="user"/>則可直接使用形如document.forms[0]["user"],或在沒有特殊字元的情況下,可以直接document.forms[0].user。

然而這造成一個問題,即name若與form上的方法或屬性衝突的話(例如form具有length屬性,而同時給form增加一個name為length的控制項),會如何?

經過我的測試,在IE(XP下的6.0)和FireFox(1.5)中,name都會覆蓋原來的屬性或方法。也就是優先向前相容。

作為一種權衡,這種做法本無確定的好壞。但問題是這種行為,在編寫指令碼中,name與方法衝突下,會產生令developer意想不到的奇怪行為。而且沒有在我看到的任何文檔中記錄。(或許我孤陋寡聞,有方法可以避免?)特別是在IE中,對於Element和一些內建方法的toString()居然都不負責任的返回“[object]”,一旦發生問題,完全令人毫無頭緒。

比如,我正好有個指令碼要檢測form中是否含有特定name的control,而IE的form恰好有個額外的item方法,結果是我必須為此特別處理:

control = myForm[name];
if (typeof control == "undefined" ||
  (name == "item" && control == "[object]"))
  ...

當然,實際上我應該為所有form的屬性和方法做特別檢測。

顯然,為了指令碼能正常運行,不應該允許任何name的屏蔽(試想name為action、method、submit、reset等的情況)。然而要網頁設計者記住一大堆應為form scripting保留的名字是不現實的。

所以結論是:這種向前相容是錯誤的設計決策。

 

註:將其作為bug向mozilla提交了。不知會有什麼回應。
https://bugzilla.mozilla.org/show_bug.cgi?id=322488

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.