无法对动态创建的文本框设置焦点
本文关键字:文本 设置 焦点 创建 动态 | 更新日期: 2023-09-27 17:58:58
我正在动态生成文本框。表行也是动态创建的,这些文本框被添加到那些动态创建的行单元格中,并使用以下代码添加到表中
protected override void OnInit(EventArgs e)
{
PopulateTextBoxes();
SetFocus();
base.OnInit(e);
}
protected void PopulateTextBoxes()
{
int quantityRequired = 0;
quantityRequired =GetQuantity();
for (int j = 0; j < quantityRequired; j++)
{
TableRow row = new TableRow();
TableCell cell1 = new TableCell();
TextBox tb = new TextBox();
tb.ID = j.ToString() +"_RowTbx"
tb.AutoPostBack = true;
tb.TextChanged += new EventHandler(tb_TextChanged);
cell1.Controls.Add(tb);
row.Cells.Add(cell1);
TableCell cell2 = new TableCell();
CheckBox chBox = new CheckBox();
chBox.CheckedChanged += new EventHandler(chBox_CheckedChanged);
chBox.AutoPostBack = true;
cell2.Controls.Add(chBox);
row.Cells.Add(cell2);
TableCell cell3 = new TableCell();
Image img = new Image();
img.Width = Unit.Pixel(25);
img.Height = Unit.Pixel(25);
img.ImageUrl = "HttpRuntime.AppDomainAppVirtualPath" + "/Images/" +"img.jpeg";
cell3.Controls.Add(img);
row.Cells.Add(cell3);
tbl_Serial.Rows.Add(row);
}
LoadDataIfExists();
}
private void tb_TextChanged(object sender, EventArgs e)
{
//I have implemented code to validate the text entered in the text box.
}
protected void SetFocus()
{
int emptytbxRow = 0;
TextBox tbx = new TextBox();
for (int i = 0; i < tbl_Serial.Rows.Count; i++)
{
string tbxId = i.ToString() + "_RowTbx";
string text = ((TextBox)tbl_Serial.Rows[i].Cells[0].FindControl(tbxId))).Text;
if (text == null || text==string.Empty)
{
tbx=((TextBox)(tbl_Serial.Rows[i].Cells[0].FindControl(tbxId)));
if (tbx != null)
tbx.Focus();
}
}
protected void LoadDataIfExists()
{
List<string> lstData=Service.GetData(int someNum)
for (int j = 0; j < lstData.Count; j++)
{
string tbxID = j.ToString() + "_RowTbx";
TextBox tbx = (TextBox)tbl_Serial.Rows[j].Cells[0].FindControl(tbxID);
tbx.Text = lstData[j];
}
}
当我调试时,tbx.focus似乎正确命中,但我没有看到光标在UI的文本框上闪烁。我不知道我是不是错过了什么顽皮的东西。谢谢。
编辑:对不起,我不清楚。加载页面时,文本框可能包含数据,但并非所有文本框都包含数据。因此,每当加载页面时,都会有一些包含数据的文本框,还有一些是空的。我希望光标位于第一个空框。
如果您知道哪个文本框是您的第一个空文本框,那么您还需要了解页面生命周期。OnInit是在页面生命周期的早期发生的,因为页面仍在初始化,而对象尚未呈现到表单。请尝试OnLoad或使用PreRender在呈现表单之前将焦点设置为项目。
下面的链接将向您展示在循环期间可以挂接的所有可用方法。
ASP页面生命周期
由于某种未知的原因,具有以下相同逻辑的C#代码不起作用,而javascript起作用。希望以下内容将来能帮助到别人。感谢Ligua为我们提供了起点。
window.onload = function () {
FindWhichTextBoxIsEmpty();
}
function FindWhichTextBoxIsEmpty() {
var tableSerial = document.getElementById('tbl_Serial');
for (var i = 0; i < tableSerial.rows.length-1; i++) {
var ID = i.toString() + "_RowTbx";
if (document.getElementById(ID).value!="") {
var tb = document.getElementById(ID).value;
if (tb != "") {
if (i + 1 < tableSerial.rows.length-1) {
var nextID = (i + 1).toString() + "_RowTbx";
document.getElementById(nextID).focus();
}
}
}
}
}
没有弄清楚你的问题,我得到的是你动态地创建了一个文本框,并试图在运行时集中它。。这可能是您尝试创建tb+=getFocus事件的工作,或者尝试tb。Focus();