input+select输入汉字或拼音快速选择数据第6步 修改用户控件
今天测试两个控件在数据控件里的使用情况,发现了一些问题,一一修改,修改原因就是注释上写的了
现在还有问题:
1.小燕子测试到有些汉字取拼音不正确,“妞”的拼音取成了“zuo”
2.还是select的选择问题,如果只是单击鼠标选择一项,没问题,就是,如果想要用鼠标拉着select的滚动条往后浏览数据后再选择,鼠标只要一点到select,我就默认选择第一项了。。。我不知道怎么判断鼠标点在选项上还是点在滚动条上,如果我在最开始不设置默认选项,这里可以利用selectedIndex属性吗?
先记录今天的。。。
PhonicsSelect.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
//不判断IsPostBack,是因为如果放在数据控件里,判断了这个后,数据控件重新绑定时,不会写入脚本
if (String.IsNullOrEmpty(LtPhonics.Text))
{
IniPhonicsArray();
}
}
PhonicsInput.ascx.cs,这个改动比较多,因为原来我只是循环了Parent.Controls,这是个bug,如果我把控件放在不同的服务器端容器里,像数据控件、Panel、MultiView等等一堆的这些容器里,当前用户控件的Parent.Controls,就只能取到当前用户控件了,所以我改成了用递归的方式,整个页面搜索
#region 设置Js脚本
protected void Page_Load(object sender, EventArgs e)
{
//不判断IsPostBack,是因为如果放在数据控件里,判断了这个后,数据控件重新绑定时,不会写入脚本
if (String.IsNullOrEmpty(LtAssignment.Text))
{
SetPhonicsJs();
}
}
private void SetPhonicsJs()
{
int inputIndex = -1;
//递归检索整个页面中的所有控件,给每一个当前的PhonicsInput控件添加脚本
WriteJs(Page.Controls, ref inputIndex);
}
private void WriteJs(ControlCollection ctrls, ref int inputIndex)
{
foreach (Control c in ctrls)
{
if (!c.HasControls()) continue;
if (c is PhonicsInput)
{
inputIndex++;
if (c.ID != this.ID) continue;
if (inputIndex == 0)
{
//页面中的第一个input控件,声明数组
LtDeclareArray.Text = "<script type=\"text/javascript\">var wordInputArray = new Array(); var wordValueArray = new Array();</script>";
}
//赋值
LtAssignment.Text = String.Format("<script type=\"text/javascript\">wordInputArray[{0}] = document.getElementById(\"{1}\"); wordValueArray[{0}] = document.getElementById(\"{2}\");</script>", inputIndex.ToString(), TbWord.ClientID, HfWord.ClientID);
}
else
{
WriteJs(c.Controls, ref inputIndex);
}
}
}
#endregion