select2 multiple 防止其他输入在输入时提交表单

Posted

技术标签:

【中文标题】select2 multiple 防止其他输入在输入时提交表单【英文标题】:select2 multiple prevents other input from submitting form on enter 【发布时间】:2016-05-11 14:29:51 【问题描述】:

我有一个带有简单输入和 select2 输入的表单,如下所示:http://codepen.io/anon/pen/QyBxwE

当第一个输入被聚焦时按回车应该提交表单(在这种情况下,重定向到 404 页面)。

由于某种原因,多个 select2 输入阻止了表单提交。如果我删除 select2 类或 multiple 属性,表单会正常运行。

在 Safari、Chrome 和 Firefox 上的 Mac OS X Yosemite 上进行了测试,并且在所有浏览器上始终如一。

(我使用的是 jQuery 2.1.3 和 select2 4.0.1)

【问题讨论】:

你必须检查它的事件捕获;似乎它的键盘处理有点太笨拙了。 【参考方案1】:

表单的工作原理是,当您单击 Enter 时,它会尝试执行一些默认操作。第一步是提交表格。这仅在没有其他 javascript 阻止表单提交时才有效。 Select2 multiple 通过防止默认来摆脱默认操作。这样当你开始输入并点击回车时,它不会自动提交。

解决方案是使用第二种默认选项。那就是在页面上有一个提交按钮。带有转到最近的提交按钮的表单并单击它。此操作不会被 select2 JavaScript 覆盖。

http://codepen.io/anon/pen/yeqxQJ

只需将<input type="submit"> 添加到您的表单中,它就会按照您想要的方式工作。

【讨论】:

如果你真的需要表单外的按钮? 您可以使用 css 隐藏内部按钮,不可见。不显示我相信摆脱了提交按钮的功能。然后你可以在表单元素的外面有一个<button onclick="myForm.submit()"></button>。但如果你能帮上忙,那就让表单也包含按钮。

以上是关于select2 multiple 防止其他输入在输入时提交表单的主要内容,如果未能解决你的问题,请参考以下文章

Select2 - 选项项中的自定义输入字段,防止点击事件

jQuery Select2 onkeyup 没有触发

使用 Select2 Multiple - 与 vueJS2

Laravel 背包 select2_multiple 无法正确显示

select2 MULTIPLE占位符不起作用

select2 MULTIPLE 占位符不起作用