首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jquery验证动态表单的图片上传是否不显着?

使用Jquery验证动态表单的图片上传是否不显着?
EN

Stack Overflow用户
提问于 2012-11-06 22:29:32
回答 3查看 3.6K关注 0票数 0

我有一个图片上传是在一个动态表单上创建的。我正在尝试制作它,这样我就可以验证上传的文件是一个实际的图像,并且不引人注意地这样做。我读过关于.rules()设置和使用accept属性的文章,但这需要输入字段名(http://docs.jquery.com/Plugins/Validation/Methods/accept)。由于表单是动态的,所以我不知道字段名。生成上传输入的视图如下所示:

代码语言:javascript
复制
 <input type="file" size="20" name="@(Model.FormItem.Id + "-image")" id="@(Model.FormItem.Id + "-image")" />

所以我所有的文件输入都有一个"-image“后缀。是否有方法使用jquery选择器来为验证器规则添加规则,而不是使用特定的字段名?

编辑好吧,很明显,我没有解释什么问题是好的。也许解决办法是如此简单,不知何故,我错过了。我知道如何使用jQuery选择器,但从我看到的rules语法示例来看,您必须为规则提供一个静态字段名。如何将验证规则分配给选择器而不是静态字段名?

所以现在这就是我所拥有的

代码语言:javascript
复制
 var validatorData = $('#items-form').data('validator');

        $.extend(validatorData.settings, {
            rules: {
                static_field_name: { accept: "jpg|png" }
            },
            messages: {
                static_field_name_message: "The file must be an image."
            }
        });

如果我用适当的选择器static_field_name替换$('input[name$="-image"]'),这也是行不通的(显然)。那我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-07 17:42:20

我了解了如何使用.addClassRules()这样做:

代码语言:javascript
复制
$.validator.addClassRules("image-upload", {
       accept: "jpg|png|gif"
});

然后将类image-upload应用于输入。但是,为了使它正常工作,我不得不重构规则以获得自定义消息(rules):

代码语言:javascript
复制
$.validator.addMethod("acceptImageTypes", $.validator.methods.accept,
  "Selected File must be an image.");

        $.validator.addClassRules("image-upload", {
            acceptImageTypes: "jpg|png|gif"
        });

然后将标记更改为:

代码语言:javascript
复制
<label>Image</label>
<input type="file" size="20" data-val="true" class="image-upload" name="@(Model.FormItem.Id + "-image")" id="@(Model.FormItem.Id + "-image")" />
<span class="field-validation-valid" data-valmsg-for="@(Model.FormItem.Id + "-image")" data-valmsg-replace="true">File must be an image.</span>
票数 1
EN

Stack Overflow用户

发布于 2012-11-06 23:01:42

我认为解决这一问题的方法有两种:

1)使用jQuery的.children()或$(“#父输入:first”)或$("inputtype=file:last")选择器,这样您的输入就不需要静态名称。

2)如果在给定的动态名称中有任何类型的模式,则对jQuery选择器使用正则表达式:

( a) jquery:http://api.jquery.com/attribute-ends-with-selector/

( b)或完全正则化方式:http://james.padolsey.com/javascript/regex-selector-for-jquery/

这应该是最难的部分。然后你就可以像平时一样添加你的规则了。

票数 0
EN

Stack Overflow用户

发布于 2014-02-25 21:50:48

当然,你的答案是有效的,我补充说,这是一种稍微不同的方式去剥掉同一只猫。

在cshtml页面的c#代码部分:

代码语言:javascript
复制
//only allow these file types for upload
var allowedUploadExtensions = ".CSV|.DOC|.DOCX|.JPG|.JPEG|.PDF|.XLS|.XLSX|.TIF|.TIFF";    
var acceptMessage = allowedUploadExtensions.Replace("|", ",");

在您的$(文档)就绪函数中:

代码语言:javascript
复制
            $.validator.addMethod('isValidFileExtension', function (value, element) {
            if (value == '')
                return true;  //data-val-required will catch lack of value.
            var extension = value.substr((value.lastIndexOf('.'))).toUpperCase();
            var validFileExtensions = new String('@allowedUploadExtensions').toUpperCase().split('|');
            return $.inArray(extension, validFileExtensions) > -1;
        });

        $('.file-upload').rules('add', { isValidFileExtension: true, messages: { isValidFileExtension: 'Invalid file extension, valid extensions are @acceptMessage'} });

然后在你的标记中:

代码语言:javascript
复制
<input type="file" name="UploadedFile" id="UploadedFile" 
                    class="file-upload"
                    data-val="true" 
                    data-val-required="Please select a document to upload."/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13260471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档