首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止从javascript提交表单

问停止从javascript提交表单
EN

Stack Overflow用户
提问于 2015-02-22 15:28:25
回答 2查看 1.5K关注 0票数 1

我已经为问题http://jsfiddle.net/20k4ur8o/准备了这个演示

如您所见,当您尝试通过输入提交表单时,它将被停止,但是当您单击该按钮时,表单将提交。在不覆盖函数的默认行为的情况下,如何防止在调用.submit()时提交表单,因为在调用时还需要保持其他提交侦听器的活动?

HTML

代码语言:javascript
复制
<form action=test id=form>
    <input type=submit>
</form>
<button id=submit>Submit</button>

JS

代码语言:javascript
复制
document.getElementById('form').addEventListener('submit', function (e) {
    e.preventDefault();
    alert('stopped');
}, false);

document.getElementById('submit').onclick = function () {
    document.getElementById('form').submit();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-22 15:34:40

你可以这样做:

代码语言:javascript
复制
(function() {
  var form = document.getElementById('form');
  var submit = form.submit;

  form.submit = function() {
    var evt = new Event('submit', {
      cancelable: true
    });

    form.dispatchEvent(evt);

    //minimc the default behaviour and submit the form if 'preventDefault'  was not called.
    if (!evt.defaultPrevented) {
      submit.call(form);
    }
  };
}());

但是,这可能会导致旧浏览器中的内存泄漏。

编辑更新代码以包括事件发射。这只在最新的WebKit/BLINK和FireFox中进行了测试。对于IE和更旧的浏览器,您可能需要一个退路。

更新小提琴

编辑2

您也许应该考虑另一种解决方案,例如:

代码语言:javascript
复制
function submitCallback(e) {
    e.preventDefault();
    alert('stopped');
}    

document.getElementById('form').addEventListener('submit', submitCallback, false);

formPreventSubmit(document.getElementById('form'), submitCallback);


function formPreventSubmit(form, submitCallback) {
  var submit = form.submit;

  form.submit = function() {
    var evt = new SomeCustomEvent();

    submitCallback(evt)

    if (!evt.defaultPrevented) {
      submit.call(form);
    }
  };
}

SomeCustomEvent需要是模仿具有preventDefault函数的真实事件的行为的类。

票数 1
EN

Stack Overflow用户

发布于 2015-02-22 15:32:10

代码语言:javascript
复制
document.getElementById('submit').onclick = function () {
  document.getElementById('form').submit(function(e) {
    alert( "Handler for .submit() called." );
    e.preventDefault();
  });
}

编辑:我错了,我误解了你的问题。只需将事件侦听器绑定到submit方法并运行相同的preventDefault方法即可。

http://api.jquery.com/submit/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28659588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档