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

【讨论】:

或替代语法:&lt;telerik:RadTextBox ClientEvents-OnFocus="makefieldlonger" /&gt; 谢谢,这很好用,我之前试过这个但是得到了对象为空的错误,我挖得更深,我发现我需要做以下事情: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的主要内容,如果未能解决你的问题,请参考以下文章

javascript onclick,匿名函数

JavaScript 函数和事件 (onclick/)

Backbone:删除省略号onclick

onClick() 事件适用于一个 div,但不适用于另一个。为啥?

JavaScript 函数仅适用于 Windows 机器

formatDate JavaScript 函数仅适用于 Chrome