jquery 在表单提交时从输入字段中删除必需的属性

vaj7vani  于 2023-03-07  发布在  jQuery
关注(0)|答案(9)|浏览(146)

型号:

[Display(Name = "City"]
[Required]
[RegularExpression(@"^(?!\d$).*$"]
[StringLength(20,MinimumLength = 2]
public string City { get; set; }

表格:

@Html.LabelFor(x => x.City, new { @class = "control-label" })
@Html.TextBoxFor(x => x.City, new {id="city" })

脚本:

<script>
  $(document).ready(function () {   
    $("#identificationForm").submit(function (e) {
      var required=document.getElementById("city").required;
      console.log(required);
      // e.preventDefault();
     });
  });
</script>

我想删除所需的属性,如果一些条件得到满足。无法这样做。我该如何实现这一点?

eh57zj3b

eh57zj3b1#

JavaScript区分大小写。
用途

document.getElementById("city").required = false;

Demonstration
请注意,当您试图在元素存在之前访问它时,代码可能无法正常工作。如果您不对事件执行代码,请将脚本放在元素之后:

<input type="text" id="city" required>
<script>
if(somecondition is true){
    document.getElementById("city").required = false;
}
</script>

还需要注意的是,你不能在提交函数中改变这一点并期望你的表单被提交,因为已经太晚了:这个事件处理程序将不会被调用如果这必需的域是不填充!

3vpjnl9f

3vpjnl9f2#

您可以使用:

document.getElementById("city").removeAttribute("required");

或者使用jQuery

$('#city').removeAttr('required')
6yt4nkrj

6yt4nkrj3#

你应该这样做:

if(somecondition is true)
{
  var city = document.getElementById("city");
  city.removeAttribute('required');
}
5w9g7ksd

5w9g7ksd4#

On Submit函数要删除所需属性时,该表单可能已经通过了验证。2步骤是首先你必须禁用验证,然后你才能提交必填字段为空的表单。接下来删除必需的属性,最后通过$.validator.unubtrusive.parse(form)手动调用验证,现在将通过调用其他验证类型来验证表单,例如string lengthformatting,除必需属性外的所有属性。选中if form.valid() then submit() else不执行任何操作。

vsikbqxv

vsikbqxv5#

在php中这很简单,在提交时不会验证你的表单。

<input type="submit" onclick="return confirm('Are you sure?')" value="Abort Test" formnovalidate>
zzlelutf

zzlelutf6#

不知道是否有人找到了更好的方法来做这件事,这可能不是最有效的方法,但你可以使用PHP来完成这件事。如果你要满足的条件是已知的页面加载之前,那么你可以有这样的:

<input type="text" id="city" 

<?php
     if (condition_is_met) {
          echo ">";
     } else {
          echo "required>";
     }
?>
093gszye

093gszye7#

如果将文本字段放入表单中,则可以使用名为***novalidate***的特殊属性覆盖必填字段。语法如下:<form novalidate> .. </form>
下面是一个例子:

<form novalidate>
  Zip code: <input type="text" name="zipcode" pattern="[0-9]{5}" required><br/>

  <input type="submit">
</form>

The novalidate Attribute以下是使用***novalidate***属性的两个实时演示的链接。

quhf5bfb

quhf5bfb8#

或者在表单提交时,如果它为null,您可以禁用它:
if($("#City").val().trim().length == 0) $("#City").attr("disabled", true);

rsl1atfo

rsl1atfo9#

这对我来说适用于数据注解。使用“rules”函数。

$("#FileUpload").rules("remove", "required");

并增加:

$("#FileUpload").rules("add", "required");

更新:这将修复前端验证,但后端验证仍然失败。为了使ModelState有效,我更改了该输入的ValidationState。

ModelState["FileUpload"].ValidationState = Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Valid;

我也会检查以确保这是唯一的错误:

if (ModelState["FileUpload"].Errors.Count == 1)
    if (ModelState["FileUpload"].Errors[0].ErrorMessage.Equals("The FileUpload field is required."))
        ModelState["FileUpload"].ValidationState = Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Valid;

相关问题