我试图找出一个名为selectize.js的基于jQuery的简洁库的工作原理。
在演示页面上,他们有一个“ createFilter”功能的示例,我想用它来检查用户输入是否已经存在,如果不存在,请创建该项目。
selectize.js中的示例(适用于电子邮件):
createFilter: function(input) {
var match, regex;
// [email protected]
regex = new RegExp('^' + REGEX_EMAIL + '$', 'i');
match = input.match(regex);
if (match) return !this.options.hasOwnProperty(match[0]);
// name <[email protected]>
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
,从而允许用户添加一个新项目,即使它已经存在,经过数小时的测试,我确信它与this.options.hasOwnProperty有关-但是我一无所获,弄清楚是什么,为什么,任何帮助或指导都将不胜感激。 最佳答案
我一直在尝试使createFilter也能正常工作,并调查了源代码,但是似乎安装正确,但是显然某个地方存在错误。现在,我的解决方案是使用实际的create方法。如果您在源代码中进行一些挖掘(create选项中的文档中也没有提到),您会注意到,在创建项目之前,它将检查您的create值是否是一个函数:
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/