当前位置: 首页 > 知识库问答 >
问题:

编辑时文件上载字段的jQuery验证

东门茂实
2023-03-14

我正在尝试使用jQuery验证插件验证表单中的文件上载字段。我只需要检查文件是否已上载,而不需要检查文件是否具有特定的大小和/或类型。在最初提交时一切正常,问题是表单被提交到数据库,并允许以后编辑。编辑表单时,我设置了一个附加的隐藏字段,末尾附加了\u orig。因此,对于名为check\u upload的字段,有一个名为check\u upload\u orig的字段,其中将包含以前的提交数据。这样用户就不必每次都重新上传文件。因此,当check\u upload字段为空时,我不知道如何编写一个方法来检查“check\u upload\u orig”字段是否有值。此特定表单中有多个文件上载字段。有些是必需的,有些不是。有什么建议吗?

以下是新表单上的代码

<script type="text/javascript">
    $(document).ready(function(){
        $("#modify").validate({
            onkeyup: function(element){ $(element).valid(); },
            onfocusout: function(element){ $(element).valid(); },
            rules: {
            },
            highlight: function(element, errorClass, validclass) {
                // if the element is a checkbox, highlight the entire group
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').addClass('error');
                } else {
                    $(element).addClass('error');
                }
            },
            unhighlight: function(element, errorClass, validclass) {
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').removeClass('error');
                } else {
                    $(element).removeClass('error');
                }
            },
            submitHandler: function(form) {
                form.submit();
            }
        });
    }); // end $(document).ready(function()
</script>

<form enctype="multipart/form-data" id="modify" name="modify" action="./" method="post">
    <input type="file" id="check_upload" name="check_upload" class=""  />
    <input type="hidden" id="check_upload_orig" name="check_upload_orig" value=""  />
    <input type="submit" />
</form>

下面是编辑表单的代码。唯一的区别是检查上传\u原始字段包含上一次提交的值。因此,如果设置了该值,则不应要求该字段上载新文件。

<script type="text/javascript">
    $(document).ready(function(){
        $("#modify").validate({
            onkeyup: function(element){ $(element).valid(); },
            onfocusout: function(element){ $(element).valid(); },
            rules: {
            },
            highlight: function(element, errorClass, validclass) {
                // if the element is a checkbox, highlight the entire group
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').addClass('error');
                } else {
                    $(element).addClass('error');
                }
            },
            unhighlight: function(element, errorClass, validclass) {
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').removeClass('error');
                } else {
                    $(element).removeClass('error');
                }
            },
            submitHandler: function(form) {
                form.submit();
            }
        });
    }); // end $(document).ready(function()
</script>

<form enctype="multipart/form-data" id="modify" name="modify" action="./" method="post">
    <input type="file" id="check_upload" name="check_upload" class=""  />
    <input type="hidden" id="check_upload_orig" name="check_upload_orig" value="32.jpg"  />
    <input type="submit" name="view_fa_php_submit" id="view_fa_php_submit" class="submit view_fa_php_submit" value="Continue" />
</form>

共有2个答案

徐唯
2023-03-14

您的规则可能看起来像:

rules: {
    check_upload: {
        required: '#check_upload_orig:blank'
    }
}

这意味着如果check\u upload\u orig为空,则只需执行check\u upload:blank-pseudoselector是jQuery验证的自定义选择器(请参阅:http://jqueryvalidation.org/blank-selector/).

有关所需功能的更多信息,请参阅http://jqueryvalidation.org/required-method/

我希望这对你有点帮助

代码没有经过测试

邓翼
2023-03-14

以下是我最后使用的代码:

<script type="text/javascript">
    $(document).ready(function(){
        $("#modify").validate({
            onkeyup: function(element){ $(element).valid(); },
            onfocusout: function(element){ $(element).valid(); },
            rules: {
                check_upload: {
                    required: {
                        depends: function(element) {
                            return $("#check_upload_orig").is(":blank");
                        }
                    },
                },
            },
            highlight: function(element, errorClass, validclass) {
                // if the element is a checkbox, highlight the entire group
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').addClass('error');
                } else {
                    $(element).addClass('error');
                }
            },
            unhighlight: function(element, errorClass, validclass) {
                if(element.type=='checkbox') {
                    $(element).parent('.ctrlHolder').removeClass('error');
                } else {
                    $(element).removeClass('error');
                }
            },
            submitHandler: function(form) {
                form.submit();
            }
        });
    }); // end $(document).ready(function()
</script>

<form enctype="multipart/form-data" id="modify" name="modify" action="./" method="post">
    <input type="file" id="check_upload" name="check_upload" class=""  />
    <input type="hidden" id="check_upload_orig" name="check_upload_orig" value="32.jpg"  />
    <input type="submit" name="view_fa_php_submit" id="view_fa_php_submit" class="submit view_fa_php_submit" value="Continue" />
</form>
 类似资料:
  • 在rails应用程序中使用AngularJS时,我遇到了一个问题:编辑记录时,文本字段的值设置为空。有没有办法告诉AngularJS使用rails给表单元素的值作为初始值? 我准备了一个JSFIDLE来演示我遇到的问题: http://jsfiddle.net/YUza7/15/

  • 问题内容: 我的工作流程中有一些JSONObject,并且通过将它们写入json文件来存储相同的JSONObject。 我想要一种有效的方式来更新json文件, 仅 更新 需要的字段, 以及更新的JSONObjects实例的内容。 例如: 档案中我有 在记忆中我有 更新将像: 通常,我想更新每个键的内容较新(不同)的值。 实际上我的代码是: 问题答案: 只需执行以下操作即可:

  • 问题内容: 我对AngularJS有疑问。如果我使用xeditable 我无法输入浮点数…那么,如何添加浮点数并在视图中进行浮点验证? 问题答案: 您需要将标签的属性设置为“ any”。 解决此问题的一种方法是利用xeditable的语法,其中您指定的任何开头的属性都将传递到基础输入标签:

  • 我上传文件有问题。我使用kartik-v/yii2小部件文件输入扩展。这是我的代码: 表单模型规则 窗体视图 控制器动作 当我提交表单时,总是出现错误“需要图像字段”。我已经阅读了很多教程,但在使用ajax验证时仍然存在同样的问题。有人能看看它,告诉我我做错了什么吗?

  • 我试图在上传图片之前验证我的表单,但是我在中间件上得到了空字符串 下面是我的中间件: 我知道我可以使用multer的fileFilter,但是有些时候我没有任何图像可以上传,只有string来存储和验证,我尝试将req.body从multipart/form-data解析为string,然后验证并使用next(),但是我得到了一个范围错误,我该如何解决这个问题呢?

  • vi 可以在命令行下编辑文件。 vi 要编辑的文件路径 练习:编辑文件 vi ninghao-project/README.md 这样会打开要编辑的文件,使用方向键可以移动光标。 编辑 想要编辑按一下小 i ,这样会进入到 vi 编辑器的编辑模式。这时你可以编辑文件里的内容,修改完成以后,按 esc 可以退出编辑模式。 搜索 搜索文件里的内容可以按 / ,然后输入要搜索的关键词,n 继续查找,