我有一个表单,要求用户在提交之前单击复选框。如果用户未选中该框,则提示我显示错误消息。目前如果我一直点击该消息继续添加。如何更改此设置,使其仅显示一次。
onFormSubmit : function(isFormValid, event){
if ($('#agree_to_terms_join').prop('checked')) {
$('#agree_to_terms_label').parent().removeClass('has-error').find('.error').remove();
} else {
$('#agree_to_terms_label').parent().addClass('has-error').append(
'<div class="textbox-alert help-block error" style="display: block;">' +
'<div class="type" style="display: block;">Message goes here</div>' +
'</div>'
);
return false;
}
}
答案 0 :(得分:1)
虽然这个解决方案可能需要额外的工作并改变一些html,但这是更好的方法:
<强> JS 强>
onFormSubmit: function(isFormValid, event) {
var elem = $('#agree_to_terms_label');
elem.is(":checked") ? elem.parent().removeClass("error"):elem.parent().addClass("error");
}
<强> CSS:强>
.has-error .error {
display: block;
}
.error {
display: none;
}
<强> HTML 强>
<div class="textbox-alert help-block error">
<div class="type" style="display: block;">Message goes here</div>
</div>
您可以将此HTML保留在表单中。切换类将比更改DOM更快
答案 1 :(得分:0)
每次发生错误时,您似乎都在附加HTML和其他HTML div。所以每个错误都会添加另一个div。通常人们通过在原始标记中使用应用了默认hidden
CSS类的错误Div来解决此问题。当用户发出错误时,hidden
类被删除。修复错误后,将重新添加hidden
类。
.hidden{
display:none;
}
您似乎也在使用jQuery,因此您只需使用show() / hide()方法。
答案 2 :(得分:0)
所以我理解,如果您多次点击,它会多次显示相同的消息。
您可以检查元素是否已经有类has-error。
这样的事情:
{{1}}
答案 3 :(得分:0)
您可以使用#html
方法,而不是使用#append
方法:
onFormSubmit : function(isFormValid, event){
if ($('#agree_to_terms_join').prop('checked')) {
$('#agree_to_terms_label').parent().removeClass('has-error').find('.error').remove();
} else {
$('#agree_to_terms_label').parent().addClass('has-error').html(
'<div class="textbox-alert help-block error" style="display: block;">' +
'<div class="type" style="display: block;">Message goes here</div>' +
'</div>'
);
return false;
}
}
我还建议您缓存jquery调用以提高性能,请查看this article。
答案 4 :(得分:0)
$(document).ready(function(){
$('#submit').click(function(){
if(!$('#checkbox').is(':checked')) {
alert("You must check the checkbox");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox"/>
<button id="submit">Submit</button>
答案 5 :(得分:0)
您需要检查是否已将消息附加到#agree_to_terms_label的父级以附加错误消息。
if ($('#agree_to_terms_label+div.error').length == 0) {
$('#agree_to_terms_label').parent().addClass('has-error').append(
'<div class="textbox-alert help-block error" style="display: block;">' +
'<div class="type" style="display: block;">Message goes here</div>' +
'</div>'
);
}
此处示例:
答案 6 :(得分:0)
您可以使用变量来检查消息是否已经显示。
var isErrorMsgDisplayed = false;
onFormSubmit : function(isFormValid, event){
if ($('#agree_to_terms_join').prop('checked')) {
$('#agree_to_terms_label').parent().removeClass('has-error').find('.error').remove();
isErrorMsgDisplayed = false;
} else {
if(!isErrorMsgDisplayed){
$('#agree_to_terms_label').parent().addClass('has-error').append(
'<div class="textbox-alert help-block error" style="display: block;">' +
'<div class="type" style="display: block;">Message goes here</div>' +
'</div>'
);
isErrorMsgDisplayed = true;
}
return false;
}
}