Javascript 函数适用于 onclick 但不适用于 onfocus
Posted
技术标签:
【中文标题】Javascript 函数适用于 onclick 但不适用于 onfocus【英文标题】:Javascript function works with onclick but not with onfocus 【发布时间】:2013-05-24 09:10:36 【问题描述】:我有以下javascript函数:
function makefieldlonger(element)
element.style.width = "550px";
我用这样的 RadTextBox 控件来调用它:
<telerik:RadTextBox ID="txtSubject" runat="server" EnableEmbeddedSkins="false"
Skin="Default" Width="255px" onclick="makefieldlonger(this)"/>
这可行,但我希望这发生在 onfocus 事件中,所以我执行以下操作:
<telerik:RadTextBox ID="txtSubject" runat="server" EnableEmbeddedSkins="false"
Skin="Default" Width="255px" onfocus="makefieldlonger(this)"/>
但它拒绝在页面上调整其大小。 它确实调用了 javascript 函数(我通过在函数中添加警报来测试它并被调用)。
所以问题是:为什么这个函数对 onclick 事件有效,而对 onfocus 事件无效?
【问题讨论】:
您的处理程序中this
的值是多少,您可以更改任何其他值(值或背景颜色)吗?
这是在用户控件中,所以我找不到值。
【参考方案1】:
尝试使用 OnBlur() 函数。您正在更改该文本框的焦点事件上的文本框大小,这可能会导致此错误。使用 Onblur 以便当控制离开时文本框 onblur 将触发并且文本框将被更改
【讨论】:
【参考方案2】:ASPX
<telerik:RadTextBox ID="txtSubject" runat="server" EnableEmbeddedSkins="false" Skin="Default" Width="255px" >
<ClientEvents OnFocus="makefieldlonger" />
</telerik:RadTextBox>
或者您可以使用 ClientEvents-OnFocus
属性将函数设置为@Blade0rz 注释
JavaScript
<script type="text/javascript">
function makefieldlonger(sender, eventArgs)
sender._element.style.width = "550px";
</script>
参考:RadControls for ASP.NET AJAX Documentation
【讨论】:
或替代语法:<telerik:RadTextBox ClientEvents-OnFocus="makefieldlonger" />
谢谢,这很好用,我之前试过这个但是得到了对象为空的错误,我挖得更深,我发现我需要做以下事情:sender._element.width = "550px";
@NickV 用您的发现更新了答案,这将在未来对其他人有所帮助。谢谢
@Damith 对不起,我打错了,它必须是“sender._element.style.width”谢谢。【参考方案3】:
看起来OnFocus
需要两个参数。我怀疑你函数中的element
指的是事件参数。
试试这个(我是ClientEvent
):
<telerik:RadTextBox ID="txtSubject" runat="server" EnableEmbeddedSkins="false" Skin="Default" Width="255px">
<ClientEvents OnFocus="makefieldlonger" />
</telerik:RadTextBox>
那么你的功能是:
function makefieldlonger(sender, eventArgs)
sender.style.width = "550px";
取自Telerik RadTextBox Documentation
【讨论】:
以上是关于Javascript 函数适用于 onclick 但不适用于 onfocus的主要内容,如果未能解决你的问题,请参考以下文章