当前位置: 首页 > 面试题库 >

使用jQuery测试输入是否具有焦点

舒永嘉
2023-03-14
问题内容

在我正在构建的网站的首页上,有几个<div>使用CSS:hover伪类在鼠标悬停在它们上方时添加边框。的其中一个<div>包含<form>,如果其中的输入具有焦点,则使用jQuery使用jQuery保留边框。除了IE6不支持s:hover之外<a>的任何其他元素,这都可以正常工作。因此,仅对于此浏览器,我们使用jQuery:hover使用该$(#element).hover()方法来模仿CSS 。唯一的问题是,现在jQuery同时处理了formfocus()hover(),当输入具有焦点时,用户将鼠标移入和移出,边框就会消失。

我当时以为我们可以使用某种条件阻止这种行为。例如,如果我们在鼠标移出时测试了任何输入是否具有焦点,则可以阻止边框消失。AFAIK,:focusjQuery中没有选择器,所以我不确定如何实现。有任何想法吗?


问题答案:

jQuery 1.6以上

jQuery添加了一个:focus选择器,因此我们不再需要自己添加它。只需使用$("..").is(":focus")

jQuery 1.5及以下

编辑: 随着时代的变化,我们发现更好的方法来测试焦点,新的最爱是BenAlman的要点:

jQuery.expr[':'].focus = function( elem ) {
  return elem === document.activeElement && ( elem.type || elem.href );
};

请注意,(elem.type || elem.href)已添加测试以过滤掉诸如身体之类的误报。这样,我们确保过滤掉除表单控件和超链接以外的所有元素。

您正在定义一个新的选择器。您可以执行以下操作:

if ($("...").is(":focus")) {
  ...
}

要么:

$("input:focus").doStuff();

任何jQuery

如果您只想找出哪个元素具有焦点,可以使用

$(document.activeElement)

如果不确定版本是否为1.6或更低,则可以添加:focus缺少的选择器:

(function ( $ ) {
    var filters = $.expr[":"];
    if ( !filters.focus ) { 
        filters.focus = function( elem ) {
           return elem === document.activeElement && ( elem.type || elem.href );
        };
    }
})( jQuery );


 类似资料:
  • 问题内容: 您如何测试浏览器是否具有焦点? 问题答案: 我尚未在其他浏览器中对此进行过测试,但似乎可以在Webkit中使用。我让您尝试IE。:o) 单击开始间隔后,请更改浏览器窗口的焦点以查看结果更改。同样,仅在Webkit中进行了测试。

  • 问题内容: 我真的很惊讶,我在网上找不到使用Selenium Webdriver测试元素焦点的参考。 我想检查何时尝试提交表单而缺少必填字段时,焦点移到了空白字段。但是我看不到任何使用WebDriver API的方法。 我将能够使用JavascriptExecutor找到关注的元素。但是,阅读FAQ使我认为必须有某种方法可以使用驱动程序本身执行检查。 谢谢你的帮助。 问题答案: 将返回当前的焦点。

  • 问题内容: 是否有可靠的跨浏览器方式来检测选项卡是否具有焦点。 场景是,我们有一个应用程序会定期轮询股票价格,如果页面没有重点关注,我们可以停止轮询并为每个人节省交通噪音,尤其是当人们热衷于打开具有不同投资组合的多个标签时。 是并且为此选择吗? 问题答案: 是的,并且应该适合您的方案: http://www.thefutureoftheweb.com/blog/detect-browser-win

  • 问题内容: 我期待的是类似WebElement.isfocus()的东西,…确实很简单,但是我发现的唯一方法是使用 伪类。 这真的是不常见的任务,例如找不到大量信息吗? 我知道这个SO主题,但是距那时已经快两年了。最新版本中没有新内容吗? 您知道一些解决方法吗? 问题答案: 还有另一个主题涉及这个问题:使用SeleniumWebdriver测试元素是否为焦点 基本上,代码将是

  • 问题内容: 有没有办法断言某个元素(例如输入或链接)具有键盘焦点?我在Selenium中使用Codeception。在http://codeception.com/docs/modules/WebDriver上找不到任何内容 问题答案: 一个可靠的消息来源告诉我这可行: 测试愉快!

  • 问题内容: 我正在尝试为需要用户输入的方法创建一些JUnit测试。被测方法看起来类似于以下方法: 有没有一种方法可以自动将程序传递给int而不是我或其他人在JUnit测试方法中手动执行此操作?像模拟用户输入一样? 提前致谢。 问题答案: 你可以通过调用来用自己的流替换可以是一个字节数组: 通过将IN和OUT作为参数传递,不同的方法可以使此方法更具可测试性: