- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个带有列验证的简单示例:
function requiredFieldValidator(value) {
if (value == null || value == undefined || !value.length) {
return {valid: false, msg: "This is a required field"};
} else {
return {valid: true, msg: null};
}
}
要验证列,只需输入此选项:validator: requiredFieldValidator
但是如果我需要传递额外的参数 - 正则表达式字符串,我该如何使用正则表达式函数。
最佳答案
无论如何,在我看来,解决这个问题的最佳方法是编写您自己的编辑器,您将把它作为另一个新的自定义编辑器添加到 slick.editor.js
中。该文件也是为此而制作的。我确实实现了正则表达式测试,效果很好。
这是我的新编辑器,它不仅适用于正则表达式,还适用于各种条件类型,例如 min:2
的选项需要最小数量为 2,而 minLength :2
将要求输入是至少 2 个字符的字符串,等等...现在对于您真正要寻找的那个,那将是我的代码定义中的 pattern
类型。所以基本上,你必须在 slick.editor.js
中包含这段代码:
ConditionalCellEditor : function(args) {
var $input;
var defaultValue;
var scope = this;
var condObj = null;
this.init = function() {
$input = $("<INPUT type='text' class='editor-text' />")
.appendTo(args.container)
.bind("keydown.nav", function(e) {
if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) {
e.stopImmediatePropagation();
}
})
.focus()
.select();
};
this.destroy = function() {
$input.remove();
};
this.focus = function() {
$input.focus();
};
this.getValue = function() {
return $input.val();
};
this.setValue = function(val) {
$input.val(val);
};
this.loadValue = function(item) {
defaultValue = item[args.column.field] || "";
$input.val(defaultValue);
$input[0].defaultValue = defaultValue;
$input.select();
};
this.serializeValue = function() {
return $input.val();
};
this.applyValue = function(item,state) {
item[args.column.field] = state;
};
this.isValueChanged = function() {
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
};
this.validate = function() {
var condObj = args.column.editorOptions;
var returnMsg = null;
var returnValid = true;
if(typeof condObj.min != 'undefined') {
if( parseFloat($input.val()) < parseFloat(condObj.min) ) {
returnMsg = "Value should not be less then "+condObj.min;
returnValid = false;
}
}
if(typeof condObj.max != 'undefined') {
if( parseFloat($input.val()) > parseFloat(condObj.max) ) {
returnMsg = "Value should not be over "+condObj.max;
returnValid = false;
}
}
if(typeof condObj.minLength != 'undefined') {
if($input.val().length < condObj.minLength) {
returnMsg = "Value length should not be less then "+condObj.minLength;
returnValid = false;
}
}
if(typeof condObj.maxLength != 'undefined') {
if($input.val().length > condObj.maxLength) {
returnMsg = "Value length should not be over "+condObj.maxLength;
returnValid = false;
}
}
if(typeof condObj.pattern != 'undefined') {
if( condObj.pattern.test($input.val()) != true ) {
returnMsg = (condObj.msg) ? condObj.msg : "Value is invalid following a regular expression pattern";
returnValid = false;
}
}
if(typeof condObj.required != 'undefined') {
if($input.val().length == "" && condObj.required) {
returnMsg = "Required field, please provide a value";
returnValid = false;
}
}
// Now let's return our boolean results and message if invalid
return {
valid: returnValid,
msg: returnMsg
}
};
this.init();
},
然后在我的 SlickGrid 列定义中,我调用我定义的新编辑器并传递一些我决定作为对象传递到 editorOptions
的选项,这让我可以更灵活地添加任何我想要的选项、模式、msg、minLength 等......全部合二为一。我的示例是用于电子邮件正则表达式模式验证。
columns1 = [
...
{id:"email", field:"email", name:"Em@il", width:145, editor:ConditionalCellEditor, editorOptions:{pattern:/^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/, msg:"Must be a valid email"} },
...];
瞧,就像一个魅力!我几乎不再使用 editor:TextCellEditor
了,因为我的新 ConditionalCellEditor
编辑器给了我更多的灵 active 。希望它有所帮助,让我知道它是怎么回事......
关于javascript - slickgrid 使用正则表达式验证列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180828/
如何在 slickgrid 中使某些行可编辑而某些行不可编辑? 最佳答案 设置 onBeforeEditCell 事件处理程序并返回 false 以防止单元格进入编辑模式。 关于slickgrid -
我有一个似乎无法解决的问题。我需要创建一个循环遍历数据集数组并为每个数据集创建一个独立的 slickgrids 的函数。问题是函数需要独立绑定(bind)到每个网格。例如: // this part
嗨,我已经尝试过这两个代码在 slickgrid 中插入新行。 代码1: data1.push({id: "12345", name: "secKey", field: "secKey", compl
我有一个 SlickGrid,用户可以在其中选择各种数据集。因此模式可以改变。因此,当用户选择新数据集时,我需要删除 SlickGrid 并重新开始,或者清除现有数据集。 什么是正确的方法?我应该删除
即使没有垂直滚动条,SlickGrid 始终在标题的最右侧保留一点空间。这个额外的空间看起来像是一个额外的列。我不想要这个额外的空间。 我没有找到任何暴露的 SlickGrid 组件的 API 来删除
我有惊人的SlickGrid配置为异步访问数据并将用户更改异步发布回服务器。一般而言,服务器可能会根据用户的更改修改一行的几个字段。因此,在更新行后,我希望 SlickGrid 仅刷新该行而不更改 V
是否可以将格式应用于 Slickgrid 中的特定行? 我知道您可以通过列应用格式规则 - 但我需要将格式规则应用于行。 即我的网格上有一个“总计”行 - 所以我想让该行加粗或从其他行中脱颖而出。 最
在 slickgrid 中,我可以使用 grid.SetSortColumn(colName,true/false) 设置排序列及其排序方向。 .这仅设置排序字形但不进行排序。有没有办法调用排序事件处
好的,让我更清楚地解释我的场景: 当一个单元格被编辑时,它会变得“脏”,我通过javascript向单元格添加一个CSS类以某种方式设置它的样式。 然后,如果用户对网格进行排序,样式就会丢失(我相信是
刚开始使用 SlickGrid,不确定我是否遗漏了什么,但是这个简单的代码似乎不起作用。它显示标题,但不显示行。 网格代码: var grid; var data = [ { ID: 1, VA
当用户按住鼠标按钮一段时间时,我试图在 Slick Grid 中弹出一个特殊菜单。菜单必须专门与该列相关,因此我需要以某种方式从该列中检索信息。由于在按住鼠标按钮期间会出现弹出窗口,因此我不能使用 o
我有一个 SlickGrid,其中包含不同数量的记录。应用程序代码将检索“ block ”中的数据,假设每个 block 有 25 条记录。 所以我的 SlickGrid 短时间内没有记录显示。然后前
我希望 slickgrid 根据最宽的内容或标题文本自动调整列的大小 - 以较宽者为准。简单来说,我希望它在调整列大小时模拟常规 HTML 表格的默认行为。我怎样才能在 slickgrid 中做到这一
我正在尝试在名为“图像”的列中插入图像,该列应仅包含图像。我正在从 Images 文件夹中获取图像 Dictionary.png,并在列初始化期间分配列中的路径。首先,图像不会显示在列单元格中,但占位
我注意到当发生验证错误时,用户会被锁定在该单元格中,直到错误得到解决。有没有办法让用户继续导航单元格? 这种方法对我有用 b/c 我在他们离开单元格时不提交,而是等到他们单击“保存”按钮。因此,当存在
我的一些列需要明确的宽度,而其他列应该填满所有可用空间。 有一个 forceFitColumns 选项,但它似乎忽略了我设置的任何显式宽度。我希望我的显式宽度得到尊重,并且隐式宽度能够被合理地估计。
使用固定标题行实现列级过滤器时,如何返回部分匹配的单元格? IE: 搜索词:“番茄” 退货:自动机、番茄等。 最佳答案 在示例中的 MyFilter 下替换此循环... for (var column
我需要禁用 slickgrid 水平滚动条。我只有一列并且有 forceFitColumns : true。 有可能吗? 谢谢 最佳答案 你可以用一点css来做到这一点。尝试将此添加到您的页面。
是否有一种可接受的方式来显示 slickgrid 表中的总行数。我看到有一个可以包含在我的页面上的寻呼机,但它带有用于分页的其他按钮/设置。 我正在使用没有分组的 DataView 对象。理想情况下,
我刚刚开始使用 slickgrid(作者 btw 的++) - 遇到了一些小问题 - 我想使用上下文编辑动态更新某些字段。编辑完成后,我希望将其发送到服务器,该服务器也应该验证发送的内容。如果出现错误
我是一名优秀的程序员,十分优秀!