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

Javascript 从表单提交的输入字段中删除必需的属性,javascript,jquery,html,asp.net-mvc-4,Javascript,Jquery,Html,Asp.net Mvc 4,型号: 表格: 脚本: @Html.LabelFor(x => x.City, new { @class = "control-label" }) @Html.TextBoxFor(x => x.City, new {id="city" }) $(文档).ready(函数(){ $(“#身份证明表”)。提交(功能(e){ var required=document.getElementById(“城市”)。required; 控制台日志(必需); //e.预防违约(); });

型号:

表格:

脚本:

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

$(文档).ready(函数(){
$(“#身份证明表”)。提交(功能(e){
var required=document.getElementById(“城市”)。required;
控制台日志(必需);
//e.预防违约();
});
});

如果满足某些条件,我想删除必需的属性。无法这样做。如何实现此目的?

JavaScript区分大小写

使用

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

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

如果(某些条件为真){
document.getElementById(“城市”).required=false;
}
还请注意,您不能在提交函数中更改此项,并期望表单被提交,因为为时已晚:如果未填写必填字段,则不会调用此事件处理程序

你应该这样做:

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

if(somecondition is true)
{
  var city = document.getElementById("city");
  city.removeAttribute('required');
}
或者使用jQuery

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

当提交时
函数删除所需属性时,表单已经通过了验证。步骤如下:首先,您必须禁用验证,然后才能提交必填字段为空的表单。接下来删除所需属性,最后通过
$.validator.unubtrusive.parse(form)
手动调用验证,现在将通过调用其他验证类型(如
字符串长度
格式
)来验证表单,除了所需属性之外的所有其他类型。检查
如果form.valid(),则提交(),否则
什么都不做。

在php中,这非常简单,提交时不会验证表单

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

不确定是否有人找到了更好的方法,这可能不是最有效的方法,但您可以使用PHP来完成。如果在页面加载之前已知您希望满足的条件,则您可以:

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

如果将文本字段放在表单中,则可以使用名为novalidate的特殊属性覆盖所需字段。这是语法:

以下是一个例子:

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

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

邮政编码:

这里有一个链接,其中有两个使用novalidate属性的实时演示。

或者在提交表单时,如果表单为空,您可以禁用它:

if($(“#城市”).val().trim().length==0)

$(“#城市”).attr(“残疾”,真实)

和Jquery:$(“#城市”)。删除属性(“必需”);或者使用document.getElementById(“城市”).removeAttribute(“必需”);你在用JqueyVal吗?如果是,移除所需的不是唯一的事情!可能的表单副本仍然没有提交,我正在表单提交功能中执行此操作。您应该发布整个功能。这是什么意思?您应该发布整个表单,而该功能,还有其他错误!表单仍然没有提交,我正在表单提交中执行此操作function@user2137186我修改了我的答案,指出了另一个问题。这可能是相关的,也可能是不相关的,这取决于你显示的代码与你实际拥有的代码有多远。我在表单提交函数中调用脚本函数,但是你的提交函数调用了吗?如果required为true且字段为空,则不应调用它。您必须在其他地方更改它,例如绑定到按钮单击事件。@dystroy考虑到他使用的是MVC4,可能存在一个JqueryVal。因此,删除所需的不是很好。表单仍然没有提交,我正在表单提交功能中执行此操作。我使用的是.net mvc4…因此不应发布此消息here@user2137186你可以发布,只是!我们也将为mvc重新标记它!
<input type="submit" onclick="return confirm('Are you sure?')" value="Abort Test" formnovalidate>
<input type="text" id="city" 

<?php
     if (condition_is_met) {
          echo ">";
     } else {
          echo "required>";
     }
?>
<form novalidate>
  Zip code: <input type="text" name="zipcode" pattern="[0-9]{5}" required><br/>

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