【发布时间】:2015-07-08 12:40:03
【问题描述】:
我有一个语义 UI 表单:
<form class="ui form">
<div class="ui form segment">
<div class="ui field">
<label>Enter New Category Name</label>
<div class="ui input">
<input type="text" placeholder="Category Name" id="category-name-input">
</div>
</div>
<div class="ui submit button" id="add-category-btn">
ADD CATEGORY
</div>
</div>
</form>
我使用此表单在我的页面上输入新类别。 当我单击具有唯一名称的提交按钮时,表单通过验证,我可以将新类别名称插入到我的 MONGO DB 数据库中:
var settings = {
inline: true,
revalidate: true,
//on: 'blur',
onFailure: function(){
console.log('failed validation');
return false;
},
onSuccess:function(e){
console.log("onSuccess");
e.preventDefault;
ProductCategories.insert({category_name : editedText});
return false;
}
};
这是我第一次使用 Semantic-UI 表单而不更改页面。
这一次,我使用语义-ui 验证来确保输入的类别名称是唯一的(因此还没有在数据库中)并确保它不是空的。
如果我输入一个唯一的名称,然后单击提交按钮。它通过了验证。
然后它像上面一样调用onSuccess 回调并将类别名称插入到 MONGO DB 数据库中,因为 Meteor 是 REACTIVE,所以页面会自行更新以显示新的类别。
我的问题是在调用onSuccess 回调后,Semantic-UI 似乎再次验证了表单。这使我处于不应该再次显示错误消息的情况。
我陷入了这种情况....如果我什么都不做,只是将输入字段的值保留为单击时的值,那么这次验证会再次根据数据库中的值检查该值,然后它使表单无效,因为该值不再是唯一的(因为它刚刚被插入)。
当调用onSuccess 时,我可以选择将该输入字段再次设为空。但如果我这样做,语义 UI 会抱怨该字段为空且不应为空。
理想情况下,我想在onSuccess 回调中写一些东西来告诉语义用户它已经完成了验证的工作,这就是为什么它已经到达 onSuccess 并且请不要重新验证,因为它会显示错误我不想显示的消息.....
我试过把:
$('form').form('clear')
和
$('form').form('reset')
在onSuccess 内部,但我发现验证发生在onSuccess 之后,因此重置表单或清除表单只会使该字段为空,并且语义 UI 表单抱怨该字段没有值。
有没有办法解决这个问题? 解决办法是什么?
非常感谢
【问题讨论】:
标签: javascript html css meteor semantic-ui