平常设计表单的时候,我们会加入一些提示文字,比如说在搜索框里,我们会提示“请输入关键字”,并在搜索框得到焦点和失去焦点的时候适时的隐藏和显示,最常见的做法是利用value来设置:
代码 (at pastebin.com):
01 <form id="search">
02 <input type="text" id="keyword" name="keyword" value="请输入关键字">
03 <button>搜索</button>
04 </form>
05
06 <script>
07 document.getElementById("keyword").onfocus = function() {
08 if (document.getElementById("keyword").value == "请输入关键字") {
09 document.getElementById("keyword").value = "";
10 }
11 }
12 document.getElementById("keyword").onblur = function() {
13 if (document.getElementById("keyword").value == "") {
14 document.getElementById("keyword").value = "请输入关键字";
15 }
16 }
17 document.getElementById("search").onsubmit = function() {
18 var keyword = document.getElementById("keyword").value;
19 if (keyword == "" || keyword == "请输入关键字") {
20 alert("请输入关键字");
21 return false;
22 }
23 return true;
24 }
25 </script>
如此的代码虽然实现了我们要的功能,但却不干净,原因在于“请输入关键字”这样的文本仅仅是提示文字而已,而不是value,虽然技术上没有大问题,但很多时候还是显得麻烦,比如说我们可能像让提示文字显示的颜色是灰色,而用户键入的文本则显示黑色。
下面看看如何利用css来实现更好的方式:
代码 (at pastebin.com):
01 <style>
02 #wrapper { position: relative; display: inline; }
03 #description { position: absolute; left: 1px; color: #999999; display: none; }
04 </style>
05
06 <form id="search">
07 <div id="wrapper">
08 <label for="keyword" id="description">请输入关键字</label>
09 <input type="text" id="keyword" name="keyword">
10 </div>
11 <button>搜索</button>
12 </form>
13
14 <script>
15 window.onload = function() {
16 if (!document.getElementById("keyword").value) {
17 document.getElementById("description").style.display = "inline";
18 }
19 };
20 document.getElementById("keyword").onfocus = function() {
21 if (!document.getElementById("keyword").value) {
22 document.getElementById("description").style.display = "none";
23 }
24 }
25 document.getElementById("keyword").onblur = function() {
26 if (!document.getElementById("keyword").value) {
27 document.getElementById("description").style.display = "inline";
28 }
29 }
30 document.getElementById("search").onsubmit = function() {
31 if (!document.getElementById("keyword").value) {
32 alert("请输入关键字");
33 return false;
34 }
35 return true;
36 }
37 </script>
这样的实现方式虽然CSS,JS代码都多了一些,但是结构更合理,通过引入label来显示提示文字(通过CSS的position属性定位),让value本身更单纯,而且提示文字和用户输入的文本在样式更容易控制,比如颜色的深浅,从而提高表单可用性。
代码 (at pastebin.com):
01 <form id="search">
02 <input type="text" id="keyword" name="keyword" value="请输入关键字">
03 <button>搜索</button>
04 </form>
05
06 <script>
07 document.getElementById("keyword").onfocus = function() {
08 if (document.getElementById("keyword").value == "请输入关键字") {
09 document.getElementById("keyword").value = "";
10 }
11 }
12 document.getElementById("keyword").onblur = function() {
13 if (document.getElementById("keyword").value == "") {
14 document.getElementById("keyword").value = "请输入关键字";
15 }
16 }
17 document.getElementById("search").onsubmit = function() {
18 var keyword = document.getElementById("keyword").value;
19 if (keyword == "" || keyword == "请输入关键字") {
20 alert("请输入关键字");
21 return false;
22 }
23 return true;
24 }
25 </script>
如此的代码虽然实现了我们要的功能,但却不干净,原因在于“请输入关键字”这样的文本仅仅是提示文字而已,而不是value,虽然技术上没有大问题,但很多时候还是显得麻烦,比如说我们可能像让提示文字显示的颜色是灰色,而用户键入的文本则显示黑色。
下面看看如何利用css来实现更好的方式:
代码 (at pastebin.com):
01 <style>
02 #wrapper { position: relative; display: inline; }
03 #description { position: absolute; left: 1px; color: #999999; display: none; }
04 </style>
05
06 <form id="search">
07 <div id="wrapper">
08 <label for="keyword" id="description">请输入关键字</label>
09 <input type="text" id="keyword" name="keyword">
10 </div>
11 <button>搜索</button>
12 </form>
13
14 <script>
15 window.onload = function() {
16 if (!document.getElementById("keyword").value) {
17 document.getElementById("description").style.display = "inline";
18 }
19 };
20 document.getElementById("keyword").onfocus = function() {
21 if (!document.getElementById("keyword").value) {
22 document.getElementById("description").style.display = "none";
23 }
24 }
25 document.getElementById("keyword").onblur = function() {
26 if (!document.getElementById("keyword").value) {
27 document.getElementById("description").style.display = "inline";
28 }
29 }
30 document.getElementById("search").onsubmit = function() {
31 if (!document.getElementById("keyword").value) {
32 alert("请输入关键字");
33 return false;
34 }
35 return true;
36 }
37 </script>
这样的实现方式虽然CSS,JS代码都多了一些,但是结构更合理,通过引入label来显示提示文字(通过CSS的position属性定位),让value本身更单纯,而且提示文字和用户输入的文本在样式更容易控制,比如颜色的深浅,从而提高表单可用性。