今天被一个小问题困扰了很久。
起因是页面加载时从数据库中读了数据出来,并将这些数据赋值给页面上的文本框等。
有一些select下拉菜单,如下所示:
<select class="send-time">
<option selected="selected">尽快</option>
<option>0:00</option>
<option>1:00</option>
<option>2:00</option>
<option>3:00</option>
<option>4:00</option>
<option>5:00</option>
<option>6:00</option>
<option>7:00</option>
<option>8:00</option>
</select>
通过jquery重新设置select的默认选中项:
$(".send-time").find("option:contains('" + d.table[0].SendTime + "')").attr("selected", true);
这里的 d.table[0].SendTime 是从数据库中获取的数据,假设其为 “8:00”,但是刷新页面后,仍旧显示默认的“尽快”。
也怪我太着急,找了很久也没发现问题。
后来在控制台打印 d.table[0].SendTime 这个值时,发现的末尾有个空格,这使得他与option中的值匹配不上。
此刻我恍然大悟,原来是数据库中字段类型定义的问题。对于sendtime这个字段,我给他的类型是char(5),
char这个类型是固定长度的,当我保存的值为“8:00"时只占用了四个字节,剩下的字节保存的是一个空格。但
是对于nvarchar/varchar这些可变长度的类型来说,他们不会存在这个问题。
正是由于当初看书时对这些细节把握的不到位,导致了今天的问题,多么痛彻的领悟!