- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,请耐心等待,因为这件事相当复杂,不仅难以解释 - 我们正在尝试为文件上传提供“更友好”的客户端验证,确保他们尝试上传的文件中不存在任何非法字符(是的,我们也进行服务器端验证,但希望允许用户在尝试上传之前修复文件中的任何非法字符)。
我们还使用 Bootstrap 2.1.0 和 Jasny 的 Bootstrap 文件输入样式。我们有一个用于 jQuery Validate 的正则表达式,对于常规输入工作正常,但在这种情况下,验证会触发文件名中是否存在非法字符,并且验证消息未正确清除等。
这里有一个 fiddle 链接,可以更好地说明它:http://jsfiddle.net/4fu5S/2/
以下是附加方法的 JS:
$.validator.addMethod(
"regexdoc",
function (value, element) {
return this.optional(element) || !(/:|\^|\[|\]|\?|&|#|\\|\*|\'|\"|<|>|\||%/g.test(value));
},
"Document Names Cannot Contain Characters /, :, ?, \\, *, |, [, ], <, ', ^, #, &, or >.");
这是验证的 JS:
$("#frmUpload")
.validate({
debug: true,
errorPlacement: function (error, element) {
element.closest('.control-group')
.find('.help-block')
.html(error.text());
},
highlight: function (element, errorClass, validClass) {
$(element)
.closest('.control-group')
.removeClass('success')
.addClass('error');
},
unhighlight: function (element, errorClass, validClass) {
$(element)
.closest('.control-group')
.removeClass('error')
.addClass('success');
},
success: function (label) {
$(label)
.closest('form')
.find('.valid')
.removeClass("invalid");
},
rules: {
uploadFile1: {
required: true,
minlength: 4,
regexdoc: true
},
renameUploadDoc1: {
required: true,
minlength: 4,
maxlength: 45,
regexdoc: true
}
}
});
要重现我遇到的问题,请尝试以下操作(IE9+ 或 Chrome 33+):
首先,通过单击“选择文档”按钮选择一个文件。理想情况下,选择一个不包含非法字符的文件(以显示验证触发器,即使它不应该)。请注意,即使您的文件不应满足触发错误消息的条件,验证也会触发,即使该消息显示无论如何。
奇怪的是,第二个字段(自动填充文件输入中的文件名)以绿色突出显示,这意味着验证确实适用于该字段。如果您选择的文件确实包含非法字符,一旦您按 Tab 键移出字段或移动焦点,就会触发验证,让您知道它是不正确的。
注意:选择要上传的文件后应该会显示文件名,Jasny Boostrap 2.1.1 也是如此,但 2.3.0 是我们在 CDN 上可以找到的最低链接版本- 我认为这没有什么区别,因为无论文件名问题如何,它(验证)都不适用于 2.1.1 或 2.3.0。
奇怪的是它在 Firefox 27 中似乎工作正常,但 Chrome 33 和 IE9+ 似乎表现出相同的问题。非常感谢任何有关如何解决此问题的想法。
最佳答案
我认为我已经解决了问题,请检查我的代码。
问题出在文件上传字段上,有些浏览器出于安全原因添加了字符串“c:\fakepath\”,该路径在执行上传时会被忽略,但会用作字段值。如果您想验证文件名,您需要检查该路径是否已添加并在验证器函数中将其删除。
function (value, element) {
if (value.indexOf('C:\\fakepath\\') === 0)
value = value.substring('C:\\fakepath\\'.length)
return this.optional(element) || !(/:|\^|\[|\]|\?|&|#|\\|\*|\'|\"|<|>|\||%/g.test(value));
},
这篇文章解释了“fakepath”的工作原理:https://stackoverflow.com/a/18254337/661140
关于javascript - jQuery 验证插件、Bootstrap、Jasny Bootstrap 文件输入正则表达式 - 验证在 Firefox 中工作而不是在 Chrome/IE 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387874/
如何将 jasny-bootstrap 导入到我的 ES6 类中? ES6: 'use strict'; import $ from 'jquery'; import jasny from 'jasn
我尝试使用 Jasny fileupload 将多个文件传递给表单内的 php,提交事件应该通过 ajax 发布的数据上传。但我无法让它工作。我无法将 jasny 上传附加到发布的数据。 如果有更好的
我正在使用Jasny Bootstrap我的asp.net项目中的文件上传控件。 看起来确实不错,但我无法将附件发送到服务器(.ASHX Web 服务) 我的布局代码如下所示 Select fi
我使用带有输入掩码的 jasny bootstrap 来验证输入。 http://jasny.github.io/bootstrap/ 具有以下代码。 如何清除输入字段的值?我尝试了以下方法: $(
我将 bootstrap 与 Jasny bootstrap ( http://www.jasny.net/bootstrap/ ) 一起使用。我正在尝试创建一个导航栏,关闭 Canvas 菜单,就像
我整合了Jasny Fileinput将小部件放入我现有的表单中。当我选择新文件时,它会显示两个按钮:更改和删除。我认为在这种情况下不需要更改按钮,所以我想完全删除此按钮。通过向元素添加 style=
这简直要了我的命。 Jasny 出色的文件上传插件在 Chrome 中运行良好,但在 Firefox 和 IE 中单击“选择文件”按钮根本不起作用。实际上,在 Firefox 中我收到一条 jquer
我正在使用 Jasny Bootstrap对于我的响应式网站。但是,子导航的链接在移动设备上不起作用。当我在我的桌面上测试它时,我可以点击链接。但是当我在手机上测试它时,它只会关闭导航栏。以下是我的代
当我使用 this example from jasny-bootstrap 时并在使用 navbar-toggle 和 navbar-collapse 以及两个使用 navbar- 的 navbar
我一直在寻找我的管理模板的侧边栏,我想使用 jasnybootstrap。我的目标是调整内容的大小并且不要翻译出屏幕。 类似的效果是这个http://startbootstrap.com/templa
我使用用于 bootstrap 3 的 jasny 上传图像预览插件但是当预览图像为空时这不起作用。我只需要显示 no+image 和 select image 按钮而不是 empty div 和 c
我将 Bootstrap 与 Jasny fork 一起使用.我正在处理用户可以上传图片的表单。我想隐藏表单的提交按钮,直到用户实际选择了图像。理想情况下,当用户从表单中删除文件时,提交按钮也应该消失
我正在使用带有 anchor 链接的 jasny bootstrap Canvas 外菜单,以便在单击时导航到 1 月部分。当我点击 anchor 链接时,我添加了一个 jquery 解决方案来关闭
我正在使用 Jasny Bootstrap 库 http://jasny.github.io/bootstrap/ 我正在使用文件输入字段。
我在我的一个网页中为 Offcanvas 推送菜单实现了 jasny bootstrap。每当我单击按钮时它都会打开。但是当我再次单击按钮或 Jasny Off-canvas 外部(主体)的任何地方时
提前感谢阅读。 使用 CDN,我将以下 API/库合并到我的元素中: 我还导入了 jquery 和 less 但没有使用 CDN 来这样做。 我在添加 Jasny Bootstrap(上图
当我试图找到类似 .row-link 的东西时,我才发现 Bootstrap 有一个扩展。所以当我在我的 table 上实现它时,我似乎无法在我点击每一行时调用模式。 boostrap 中的模态将不会
我正在阅读 this文章和作者指出以下内容: In app/app.js adjust the ApplicationView so that it doesn’t insert the wrappi
我正在尝试使用 jasny fileinput 控件实现图像缩略图预览。由于我的照片可能需要旋转,因此我添加了额外的旋转按钮。我遇到的问题是,当图像不是正方形并且旋转时,它会从缩略图空间中部分 cho
以下 HTML 使用 Jasny Bootstrap mod fileinput.js
我是一名优秀的程序员,十分优秀!