我有一个使用select2构建的标签系统,用户应该能够选择现有标签或添加新标签。我的代码的简化版本如下所示:
$('input').select2({
tags: [
{id:0, text:'red', status:'old'},
{id:1, text:'green', status:'old'},
{id:2, text:'blue', status:'old'}
],
tokenSeparators: [","],
createSearchChoice: function (term, data) {
return {id: term, text: term, status: 'new'};
}
}).change(function(e) {
if (e.added && e.added.status == 'new') {
if (confirm('Not found. Add?')) {
// Add new tag to database.
}
}
});
这是示例(示例 1)它应该如何工作。(用户可以添加现有的标签“red”、“green”和“blue”。createSearchChoice-function 允许用户创建新标签。)在这个例子中,当检测到新标签时,在 .change() 事件中什么也不做。一切都按预期工作。
但是,就像上面的代码块一样,当添加新标签时,我想确认用户是否真的想添加新标签。问题是当我在检测到新标签的括号中添加确认代码时,表单提交事件会触发。这是此行为的示例(示例 2)。只需尝试添加不存在的标签。
现在我的问题是:
- 为什么会发生表单提交?
- 我怎样才能防止这种行为?
我正在使用 select2 3.4.0 和 jQuery 2.0.2