【问题标题】:Global onBlur/onFocus全局 onBlur/onFocus
【发布时间】:2010-12-03 04:33:42
【问题描述】:

和其他人一样,我们的网络应用程序中到处都有表单。

到目前为止,我们在大多数表单元素中都使用了以下(或一些变体):

class="formThingy"    
onFocus="document.theForm.theField.className='formThingySelected';" 
onBlur="document.theForm.theField.className='formThingy';"

这很痛苦。 有没有一种简单的方法可以使用 javascript/jQuery 或 CSS 获得相同的结果?

我知道在 css 中我们可以使用 :hover 之类的东西,但这并不能得到我们想要的东西。

我的猜测是,我们可以用 jQuery 做一些事情,它可以使用“FormThingy”类查看所有内容并将其更改为 onFocus 并返回 onBlur,我只是不确定从哪里开始。

【问题讨论】:

    标签: javascript jquery css


    【解决方案1】:
    $('.formThingy').bind('focus blur', function() {
        $(this).toggleClass('formThingy formThingySelected');
    });
    

    【讨论】:

    • live 目前不支持模糊和聚焦:(
    • 哇,你说得对。我忘记了!在那种情况下,我推荐第一个版本:)
    • 我最终使用了这种方法,因为我可以将其重点放在 .formThingy 类项目上。我还有一类 .formThingyLogin 和 .formThingyLoginSelected ,另一种方法会导致问题,因此这样做可以让我更好地针对这两种情况。谢谢
    【解决方案2】:

    使用 jQuery 你可以完成同样的事情:

    $('input').focus(function() {
        $(this).attr('class', 'formThingySelected');
    }).blur(function() {
        $(this).attr('class', 'formThingy');
    });
    

    您可能需要调整选择器以获得更好的性能。选择器应匹配您希望将焦点/模糊行为附加到的所有元素。

    【讨论】:

    • 那么,如果我想对所有
    • 那么合适的选择器就是'input, select, textarea'
    • 所以我不得不问...您的答案和 Alex 的答案之间是否存在性能差异,或者差异只是风格问题?
    • 我会说使用.formThingy 作为标签名称的选择器会稍微提高性能。此外,在attr 上使用jQuery 的本机类操作方法更灵活,因为它不会覆盖其他类名。更重要的是,我在高尔夫中获胜 :)
    • 我对此不是 100% 有信心,但我似乎记得针对标签的选择器利用浏览器 API 来按标签获取元素。一些最佳实践建议尽可能在前面添加 .class 选择器。如果您只想将其应用于formThingy 的输入元素,那么我的钱花在 $('input.formThingy') 上,其表现优于 $('.formThingy')。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多