- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚一个名为 selectize.js 的简洁的基于 jQuery 的库的工作原理。 .
在演示页面上,他们有一个“createFilter”函数的示例,我想用它来检查用户输入是否已存在,如果不存在,则创建该项目。
来自 selectize.js 的示例(用于电子邮件):
createFilter: function(input) {
var match, regex;
// email@address.com
regex = new RegExp('^' + REGEX_EMAIL + '$', 'i');
match = input.match(regex);
if (match) return !this.options.hasOwnProperty(match[0]);
// name <email@address.com>
regex = new RegExp('^([^<]*)\<' + REGEX_EMAIL + '\>$', 'i');
match = input.match(regex);
if (match) return !this.options.hasOwnProperty(match[2]);
return false;
},
我自己制作一个过滤器以仅允许字母,并检查它是否已在列表中:
createFilter: function (input) {
var match, regex;
regex = new RegExp('^[a-zA-ZæøåÆØÅ][a-zA-ZæøåÆØÅ ]*[a-zA-ZæøåÆØÅ]$', 'i');
match = input.match(regex);
if (match) return !this.options.hasOwnProperty(match[0]);
return false;
},
出于某种原因,它总是返回true
,从而允许用户添加新项目,即使它已经存在,经过几个小时的测试,我确信它与此有关。 options.hasOwnProperty - 但我在弄清楚什么和原因时陷入了死胡同,任何帮助或指导将不胜感激。
最佳答案
我一直在尝试让 createFilter 也正常工作,并查看了源代码,但事情似乎设置正确,但某个地方显然存在一个错误。目前我的解决方案是使用实际的创建方法。如果您仔细研究一下源代码(在创建选项的文档中提到),您会注意到在创建项目之前,它将检查您的创建值是否是一个函数:
var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {
var data = {};
data[self.settings.labelField] = input;
data[self.settings.valueField] = input;
return data;
};
通过传入一个创建函数,该函数仅在满足特定条件时返回数据值,否则返回 {},您可以有效地在 createFilter 函数中执行您想要执行的操作。
$('#foo').selectize({
create: function(input){
var self = this;
var data = {};
// IF SOME CONDITION MET
if (bar) {
data[self.settings.labelField] = input;
data[self.settings.valueField] = input;
}
return data;
},
});
如果数据以 {} 形式返回,则不会创建该项目,用户可以根据需要继续修改它(或被告知选择无效)。
关于javascript - Selectize createFilter 中 JavaScript hasOwnProperty 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197343/
我正在尝试弄清楚一个名为 selectize.js 的简洁的基于 jQuery 的库的工作原理。 . 在演示页面上,他们有一个“createFilter”函数的示例,我想用它来检查用户输入是否已存在,
我是一名优秀的程序员,十分优秀!