【问题标题】:Need to correct this form validation需要更正此表单验证
【发布时间】:2017-04-20 13:25:20
【问题描述】:

我有这个小表单,默认情况下需要第一个字段(标题)。仅在特定条件下才需要第 2 和第 3。

案例一:如果填写工具名称,则工具名称和工具 URL 都需要。 案例二:如果填写工具URL,工具名称和工具URL都是必需的。

我不确定它是否按预期工作。 你能帮我更正我的代码吗?

$(document).ready(function(){
			articleTitle = $('#title').val();
			toolName = $('#toolName').val().trim();
			toolURL = $('#toolURL').val();
			
			
			
			if(((toolName.length>0)&&(toolURL==="")) || ((toolName.length<=0)&&(toolURL!==""))){
			
				$('#toolName').prop('required', true);
				$('#toolURL').prop('required' , true);
				
							
			} else {
				$('#toolName').prop('required', false);
				$('#toolURL').prop('required', false);
		}
			
			
			$("#myForm").submit(function(){
    
				sayHello();
				return false;
			});
			
		});
label {
  float: left;
  width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<form id="myForm">
  <label for="title">Title:</label> <input type="text" id="title" required> <br /><br />
  <label for="toolName">Tool Name: </label><input type="text" id="toolName"> <br /> <br />
  <label for="toolURL">Tool URL: </label><input type="url" id="toolURL"> <br /> <br />
  <button>Submit</button>
</form>

【问题讨论】:

  • 有什么问题?
  • 问题是如果只填写标题和工具名,则不应提交表单。同样,如果 title 和 toolURL 已填写,则不应提交表单。但是,目前我能够做到这一点。

标签: javascript jquery html forms validation


【解决方案1】:

您可以大大简化您的代码,请参阅 cmets 以获得说明。

var $toolName = $('#toolName')
var $toolURL = $('#toolURL')
var $toolInputs = $($toolName).add($toolURL)

function sayHelloToMyLittleFriend() {
  alert('sup! form was submitted')
}

$toolInputs.on('change', function(e) {

  var toolName = $toolName.val()
  var toolURL = $toolURL.val()
  
  $toolInputs.prop('required', toolName || toolURL)
})

$('form').submit(function(e) {
  var toolName = $toolName.val()
  var toolURL = $toolURL.val()
  
  var bothFilled = !!toolName && !!toolURL
  var noneFilled = !toolName && !toolURL
  
  if (bothFilled || noneFilled) {
    sayHelloToMyLittleFriend()
    return true
  }
  return false
})
label {
  float: left;
  width: 100px;
}
/* this will show what element has the required attribute */
[required] {
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<form id="myForm">
  <label for="title">Title:</label> <input type="text" id="title" required> <br /><br />
  <label for="toolName">Tool Name: </label><input type="text" id="toolName"> <br /> <br />
  <label for="toolURL">Tool URL: </label><input type="url" id="toolURL"> <br /> <br />
  <button>Submit</button>
</form>

【讨论】:

  • 您的代码有问题:第一次尝试发送只填写标题和工具名称的表单(需要输入,这很好),然后删除工具名称,您无法再次发送表单,因为仍然需要输入...
  • 仍然是问题:浏览器(在我的情况下是 Chrome)不调用提交函数,因为所有必需的输入都没有填写。
  • 是的,这是真的!我现在才意识到。此外,每次表单提交成功返回 true 时,我都无法调用我的函数。
  • 但是如何在表单提交成功时调用另一个函数呢?在我的代码中,我试图在成功提交时调用另一个名为 sayHello() 的函数。
  • 啊..刚刚添加了另一行代码 $('#myForm').on('submit', checkForm, function(){ sayHello() });
【解决方案2】:

这是一种使用无库 javascript(而不是 jQuery)的简单方法。

(尽管你会发现它与 jQuery 非常相似)。

每当在表单中输入或删除数据时,都会检查表单输入,并视情况添加或删除required 属性。

var myForm = document.getElementById('myForm');
var toolName = document.getElementById('toolName');
var toolURL = document.getElementById('toolURL');

function checkInputs() {
    if ((toolName.value !== '') || (toolURL.value !== '')) {
        toolName.setAttribute('required','required');
        toolURL.setAttribute('required','required');
    }

        if ((toolName.value === '') && (toolURL.value === '')) {
        toolName.removeAttribute('required');
        toolURL.removeAttribute('required');
    }
}

myForm.addEventListener('keyup', checkInputs, false);
<form id="myForm">
<label for="title">Title:</label> <input type="text" id="title" required> <br /><br />
<label for="toolName">Tool Name: </label><input type="text" id="toolName"> <br /> <br />
<label for="toolURL">Tool URL: </label><input type="url" id="toolURL"> <br /> <br />
<input type="submit" value="Submit" />
</form>

【讨论】:

  • 太好了,谢谢,你能帮我使用 jQuery 吗?我是 jQuery 新手,只需要在 jQuery 中实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多