我有一个表单,当提交时,如果任何字段为空id,则阻止提交并向该字段添加一个类。
出于某种原因,我似乎无法将其付诸实践,我添加了一个小提琴,任何人都可以指出我的错误吗?
答案 0 :(得分:4)
你的小提琴有几个问题。首先,您尚未关闭ready
事件处理程序。其次,将$this
传递给jQuery,即undefined
。您需要改为this
。
最后,表单始终会被提交,因为您必须实际停止提交。您可以调用事件对象的preventDefault
方法来执行此操作。这是您的代码的新版本:
$(document).ready(function(){
$("#form").submit(function(e) {
$('input').each(function() {
if ($(this).val() == '') { //Pass this into jQuery, not $this
$(this).addClass('highlight');
e.preventDefault(); //Stop the form from submitting
}
});
});
});
另请注意,在$(this).val()
循环中不必使用each
。 this
将是对DOM元素的引用,并且该元素将具有value
属性,因此仅使用this.value
会更有效。
答案 1 :(得分:1)
您没有停止实际提交表单,因此它仍然会被发布(因此会立即删除您的突出显示)。尝试将preventDefault方法添加到表单中,并在检查错误后手动提交。
答案 2 :(得分:0)
除了不调用preventDefault
之外,您在一个地方使用$this
而不是this
且括号不匹配。工作版:
答案 3 :(得分:0)
$(document).ready(function() {
$("#form").submit(function(e, a) {
$('input, textarea', this).each(function() {
if (!$(this).val()) {
$(this).addClass('highlight');
e.preventDefault();
} else($(this).hasClass('highlight')) ? $(this).removeClass('highlight') : false; // remove class on valid
});
});
});
答案 4 :(得分:0)
而不是preventDefault(),在提交时调用表单的函数中返回false也会阻止提交。在上一个答案中,让我们认为有多个空字段,preventDefault()将不必要地多次触发。
我会使用这样的东西作为更清洁的解决方案:
$(document).ready(function(){
$("#form").submit(function(e) {
var submit=true; //A flag that we'll return
$('input').each(function() {
if ($(this).val() == '') {
$(this).addClass('highlight');
submit=false //Setting the flag to false will prevent form to be submitted
}
});
return submit;
});
});