我设置了一个 AJAX 表单(实际上我正在制作另一个就地编辑插件)并为单击按钮设置一个 AJAX 绑定:
// Do default submit and cancel options.
$editor.on('click' + namespace, '.ok', function(e) {
console.log('clicked ok');
submit($original);
});
(这里 $editor 是表单,$original 是原地编辑的 span 元素;提交后,我需要再次显示 span 元素。表单包含<button>
typesubmit
和 class .ok
。)
令我惊讶的是,默认表单操作实际上被抑制了,即使我忽略了.preventDefault()
或其他任何事情。我最终将此追溯到 AJAX 提交例程最终会执行的事实:
$editor.remove();
即歼灭整个形式。不过,即使我只是 .detach() 它似乎也能工作。
可以依赖这种行为吗?应该依赖它吗?表单的突然消失是否会阻止浏览器以正常方式提交它,或者它可能在调度事件之前缓存了信息?(是否有任何网络标准对此有任何说明?)它会导致异常(甚至崩溃?)某些浏览器将表单从其脚下扫除吗?如果是这样,除了仅使用 .preventDefault 之外,这对正确设计还有什么其他影响?
附录:看起来按 Enter 键(通常会提交表单)实际上也会click
为 OK 按钮生成一个事件!这应该发生吗?同样,在 Enter-key 处理程序中删除表单似乎可以防止单击发生。
问题是,因为我正在制作一个插件,所以我打算允许 OK 按钮实际上没有附加到表单上的可能性;在这种情况下, Enter 键仍然需要工作,但如果按钮在那里,我显然只想提交一次表单......