Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';JQuery UI自动完成样式减号(-)在选项中正确 安装程序_Jquery_Jquery Ui_Autocomplete - Fatal编程技术网

为什么';JQuery UI自动完成样式减号(-)在选项中正确 安装程序

为什么';JQuery UI自动完成样式减号(-)在选项中正确 安装程序,jquery,jquery-ui,autocomplete,Jquery,Jquery Ui,Autocomplete,我使用jQueryUI创建一个自动完成列表。它会弹出焦点选项。我不决定这些选择。有些是用户从数据库配置的,有些是由第三方标准设置的。我正在使用jQuery1.11.1和jQueryUI1.11.1。我正在使用chrome电脑(Windows8.1)和mac。版本/os/浏览器似乎没有什么不同。我使用的是默认的jquery样式表 问题 其中一个预先指定的选项列表仅包含加号(+)和减号(-)。我想把这些改成“肯定”和“否定”之类的文字,但这不是一个选项。减号(-)的格式不正确。它在选项列表中始终显示

我使用jQueryUI创建一个自动完成列表。它会弹出焦点选项。我不决定这些选择。有些是用户从数据库配置的,有些是由第三方标准设置的。我正在使用jQuery1.11.1和jQueryUI1.11.1。我正在使用chrome电脑(Windows8.1)和mac。版本/os/浏览器似乎没有什么不同。我使用的是默认的jquery样式表

问题 其中一个预先指定的选项列表仅包含加号(+)和减号(-)。我想把这些改成“肯定”和“否定”之类的文字,但这不是一个选项。减号(-)的格式不正确。它在选项列表中始终显示为空行。在下图中,两个空行是负号(-)

代码 它非常简单,很容易复制。我有一本书

基本上是带有js代码的文本字段类型输入:

var $input = $('input');
$input.autocomplete(
{
  source: ['+', '-', '-', '+'],
  minLength: 0
});

$input.autocomplete('search', '');
解决方案 减号(-)似乎是某种标记字符,在列表中创建分隔符。这在其他用例中似乎很有用,但对我来说,它破坏了一切。我试图做一个
encodeURIComponent
,但当然没有效果。我不想覆盖任何js或jquery ui css来显示此字符,因为如果我合法地需要分隔符,它可能会破坏站点上的其他行为

问题 如何让jQueryUIAutoComplete将这个减号(-)显示为正常选项

更新1 似乎自动完成实际上使用ui.menu.\u isDivider函数来确定该值是否为除法器。我黑了jqueryui来证实这一点。显然,对图书馆进行黑客攻击并不理想。在附加autocomplete之前,他们是否可以覆盖菜单ui功能?也许是一个可以编辑widgets初始化脚本的函数?

回答我自己的问题。 明白了

因此,我找到了
菜单。_isDivider
函数用于定义自动完成中的除法器。当autocomplete创建菜单实例以存储其值时

我试图覆盖autocomplete实例的
\u isDivider
函数,但似乎初始化后对于初始搜索来说太晚了。也许我可以在更新后添加这些值,但我还没有尝试过

因此,我必须在初始化之前找到覆盖函数的方法。这是:

jQuery.ui.menu.prototype._isDivider = function(){return false}
工作实例

当然,您可以将其替换为任何正则表达式或其他类型的搜索,以将其他特定值设置为除法器

直接从jquery ui(匹配空格或破折号):


当然,这个解决方案在设置之后会影响所有jQueryUI元素。所以要当心。

虽然OP已经在问题的更新中以及在中找到了许多细节,但我发现我认为解决问题的方法更加可控

正如OP所指出的,问题在于,根据菜单默认实现的规范,创建和:

默认情况下,仅包含空格和/或破折号的任何项目都被视为分隔符

然而,jQueryUI提供了一种很好的解决方法,它允许访问所有必要的组件。一个例子是:

$('some selector')。自动完成('widget')。菜单('instance')。\u isDivider=function(){
返回false;
};

该部分获取与autocomplete元素关联的菜单元素。该部分获取菜单实例,该实例是创建菜单时返回的对象。从那里,您可以随意覆盖
\u isDivider
方法。

问题在于jQueryUI使用
-
作为将除法器插入下拉列表的键。这是没有办法的。甚至不能使用字符实体(例如
)代替
-
,因为jQuery使用
text()
填充项目。您可能最好使用另一个自动完成库,而不是绕过这种短视。这是jQueryUI不太好的另一个原因。@RoryMcCrossan我已经使用jquery多年了,仅仅因为一个疏忽而随意说“它不太好”是一种无知。除此之外,它的精益,灵活,强大,性能和全面。在这里留下有用的评论,并在您的意见博客中创建jQueryUI。这不是随机的——jQueryUI中有很多类似的问题。我还花时间诊断了你的问题,所以欢迎你这么做。@Rorymcrossan我已经在我的问题中指出了这个问题。谢谢你的阅读,但“只是不要使用那个真正强大的库”并不是一个有用的评论。我将离开你去寻找解决方案,并祝你好运。由于这是一个特定于实例的覆盖,我认为这是一个更好的解决方案。现在标记为已接受的答案,而不是我自己的答案。
return !/[^\-\u2014\u2013\s]/.test( item.text() );