我有2个观点。 view1的最后一个控件是txtName& view2的第一个控件是txtAge。需要在TAB印刷机上将焦点从txtName更改为txtAge,但我无法实现这一点。
ASPX:
<asp:Multiview ID ="multiview1" runat="server" ActiveViewIndex="0">
<asp:view ID="view1" runat="server">
<asp:Textbox id="txtName" runat="server"
onfocusout="SetFocus('<%=txtAge.ClientId%>');"></asp:TextBox>
</asp:view>
<asp:view ID ="view2" runat="server">
<asp:Textbox id="txtAge" runat="server" ></asp:TextBox>
</asp:view>
</asp:Multiview>
JS:
function SetFocus(controlId){
/*alert(controlId);*/
document.getElementById(controlId).focus();
}
当我检查警报时,它会在弹出窗口中显示<%=txtAge.ClientId%>
。哪里出错了。
这是我的新发现:
当目标控件位于同一视图中时,此代码可以正常工作,但是当它位于另一个视图中时,它不会。所以我认为,还应该做一些其他事情来改变视图,然后担心焦点:
<asp:Textbox id="txtName" runat="server"
onfocusout="SetFocus();"></asp:TextBox>
function SetFocus(){
document.getElementById('<%=txtEmail.ClientID%>').focus();
/* txtEmail is in the same view 'view1' as in txtName */
}
答案 0 :(得分:1)
您可以尝试在服务器端代码中设置它:
txtName.Attributes["onfocusout"] = String.Format("SetFocus('{0}');", txtAge.ClientId);
答案 1 :(得分:1)
使用tabindex
也许就足够了
http://msdn.microsoft.com/en-us/library/ms178231%28v=vs.100%29.aspx
使用内置功能而不是javascript。
如果您使用asp.net 4.x,则可以使用clientidmode = static http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx
<asp:Multiview ID ="multiview1" runat="server" ActiveViewIndex="0">
<asp:view ID="view1" runat="server">
<!-- other controls -->
<asp:Textbox id="txtName" runat="server" TabIndex="1"/>
</asp:view>
<asp:view ID ="view2" runat="server">
<asp:Textbox id="txtAge" runat="server" TabIndex="2"/>
<!-- other controls -->
</asp:view>
</asp:Multiview>
修改强>
如果你不介意使用jQuery。您可以在<asp:View..
周围包装div,然后执行以下操作:
$("div.view input:last-child").on("change", function(){
$(this).parent().next().find("input:first-child").focus();
});
请记住这是伪代码。这只是一个想法。
答案 2 :(得分:0)
试试这个,看看它是否更好。
<asp:Textbox id="txtName" runat="server"
onfocusout='<%= String.Format("SetFocus(\"{0}\");", txtAge.ClientId) %>'></asp:TextBox>
答案 3 :(得分:0)
在这种情况下,无法使用内联块设置属性...因为您可以看到正在获取文字<%=txtAge.ClientId%>
文本,并且您没有获得您期望的已处理值。
你有两个明显的解决方案......
第一个(Yuriy已经在答案中给你)是从背后的代码设置它...
txtName.Attributes["onfocusout"] = String.Format("SetFocus('{0}');",
txtAge.ClientId);
(免责声明,我不知道MultiView
是什么,因为我从未使用它,所以我不能100%确定下面的第二个选项实际上可以在你的场景中使用。此外,它是未经测试的代码。)
另一种方法是使用Murali在答案中提供的内容,但需要额外操作...
<asp:Textbox id="txtName" runat="server" onfocusout="SetFocus(this);" />
function SetFocus(nameCtrl) {
var ageId = nameCtrl.id.replace(/txtName/,"txtAge");
var ageCtrl = document.getElementById(ageId);
ageCtrl.focus();
}
答案 4 :(得分:0)
更改行onfocusout="SetFocus('<%=txtAge.ClientId%>');"></asp:TextBox>
作为onfocusout="SetFocus('txtAge');"></asp:TextBox>
您无需发送ClientId