如何删除/更改JQuery UI自动完成帮助器文本?


94

看来这是JQuery UI 1.9.0中的一项新功能,因为我之前多次使用过JQuery UI,并且此文本从未弹出过。

在API文档中找不到任何相关内容。

因此,使用带有本地源的基本自动完成示例

$( "#find-subj" ).autocomplete({
    source: availableTags
});

当搜索匹配时,将显示以下相关帮助器文本:

“有1个结果可用,使用上下箭头键进行导航。”

我如何以一种不错的方式禁用它,而不是通过使用JQuery选择器将其删除。


1
您在哪个浏览器中看到此内容?您能在jquery ui网站中看到相同的对话框

2
我从未见过,您能否提供提琴手或一些其他代码,以便我们进一步进行研究?
zmanc 2012年

1
对我来说,问题是那个位置:相对的,对于可访问性内容显示的范围被覆盖...我刚刚添加了“!important”,现在我可以保持可访问性
iKode

您的疑问节省了我的时间。因此对您+1 :-)
Ashok kumar,2014年

Answers:


151

我知道这已经被接受了,但是只想举一个实现示例:

var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++"
    ];

$("#find-subj").autocomplete({
    source: availableTags,
    messages: {
        noResults: 'no results',
        results: function(amount) {
            return amount + 'results.'
        }
    }
});

4
我尝试了此操作,并将字符串“ null”放在同一位置。解决方案是将其更改为:noResults:”,您将一无所有。
帕特里克

2
为我工作了noResults:''。想知道为什么它没有在api.jqueryui.com上记录
Niels Steenbeek

不确定是什么source: availableTags?我删除了它,但仍然没有消息。
Chuck Le Butt 2013年

3
@Django Reinhardt是从OP问题中的示例复制而来的。源定义了自动填充数据的来源。例如,availableTags可能是一个包含url到单词映射的JSON对象的本地变量,[{ '/tag/cats': 'Cats', etc... }]因此,当用户键入CaCats时,将在下拉列表中显示,并且在选择或单击时,可以使用url填充隐藏字段。
TK123 2013年

1
非常感谢。在API文档中找不到此内容。
Chorinator

86

这用于可访问性,一种简单的隐藏方法是使用CSS:

.ui-helper-hidden-accessible { display:none; }

或(请参见下面的丹尼尔评论)

.ui-helper-hidden-accessible { position: absolute; left:-999em; }

5
如您所说,它用于辅助功能,以便具有屏幕阅读器的人可以更好地了解小部件。通过使用display:none; 您也将其隐藏在屏幕阅读器中。最好在屏幕上移动以下位置:绝对 左:-999em;
DanielGöransson2014年

代替left: -9999px,您还可以使用left: 200%(200%与100%只是为了解决所有可能的浏览器怪癖,而其中100%并不能完全消除它)。
jbyrd

23

此处的最佳答案可实现所需的视觉效果,但击败了具有ARIA支持的jQuery对象,并且对依赖它的用户有些反感!那些曾经提到过jQuery CSS为您隐藏的人是正确的,这是这样做的样式:

.ui-helper-hidden-accessible {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
}

将其复制到样式表中,而不要删除消息,请:)。


1
2019年更新:请勿使用该clip属性,因为该属性现已过时-请参阅developer.mozilla.org/en-US/docs/Web/CSS/clip
jbyrd

17

根据这个博客

现在,我们使用ARIA实时区域来宣布结果何时可用以及如何浏览建议列表。可以通过messages选项配置公告,该选项具有两个属性:noResults用于不返回任何项目时的结果和noResults至少用于返回一个项目时的结果。通常,仅当您希望使用其他语言编写字符串时,才需要更改这些选项。当我们致力于为所有插件的字符串处理和国际化提供完整的解决方案时,消息选项可能会在将来的版本中更改。如果您对邮件选项感兴趣,我们建议您阅读源代码。相关代码位于自动完成插件的最底部,只有几行。

...

那么,这如何应用于自动完成小部件?好吧,现在当您搜索一个项目时,如果您安装了屏幕阅读器,它将读取类似“ 1个结果可用,使用向上和向下箭头键进行导航”的信息。太酷了吧?

因此,如果您转到github并查看自动完成源代码,在571行附近,您将看到它的实际实现位置。


11

添加jQuery CSS也可以删除说明文本。

<link
 rel="stylesheet"
 href="http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css" />

也为我工作。
靛蓝K 2014年

4

由于出于可访问性原因而存在于此,最好用CSS将其隐藏。

但是,我建议:

.ui-helper-hidden-accessible { position: absolute; left: -9999px; }

而不是:

.ui-helper-hidden-accessible { display:none; }

因为前者会将该项隐藏在屏幕外,但仍允许屏幕阅读器阅读,而display:none事实并非如此。


而不是left: -9999px,而是使用left: 200%(200%与100%只是为了解决所有可能的浏览器怪癖,而其中100%并不完全脱离屏幕)。
jbyrd

2

好吧,这个问题有点老了,但是当包含相应的css文件时,文本根本不会显示:

<link
 rel="stylesheet"
 href="http://code.jquery.com/ui/1.9.0/themes/YOUR_THEME_HERE/jquery-ui.css" />

当然,您必须插入一个实际的主题,而不是YOUR_THEME_HERE例如“平滑”


1

设置样式jQuery主题本身如何设置样式。许多其他答案建议包括整个样式表,但是如果您只想要相关的CSS,这是通过以下方式完成的http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css

.ui-helper-hidden-accessible { 
    position: absolute !important; 
    clip: rect(1px 1px 1px 1px); 
    clip: rect(1px,1px,1px,1px);
}

1

在脚本中自动完成之后立即添加此代码会将烦人的帮助程序推离页面,但是使用屏幕阅读器的人仍将受益于此:

$(document).ready(function() { //pushing the autocomplete helper out of the visible page
    $(".ui-helper-hidden-accessible").css({"position": "absolute", "left":"-999em"}) //{"display","none"} will remove the element from the page
});

我不喜欢用JS操作CSS,但在这种情况下,我认为这是有道理的。JS代码首先创建了问题,该问题将在同一文件下面的几行中得到解决。IMO比在单独的CSS文件中解决问题要好得多,其他人可能不知道为什么以这种方式修改.ui-helper-hidden-accessible类,因此可能会对其进行编辑。


1
我一直在寻找解决方案,您的解决方案一直奏效。
蒂莫西·

而不是left: -9999px,而是使用left: 200%(200%与100%只是为了解决所有可能的浏览器怪癖,而其中100%并不完全脱离屏幕)。
jbyrd

0

jQuery CSS .ui-helper-hidden-accessible位于themes / base / core.css文件中。您应该将此样式文件(至少)包括在样式表中,以实现向前兼容性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.