javascript - 提交表单的事件监听器

标签 javascript dom-events form-submit

我为表单提交编写了一个事件监听器,这导致我出现了一些问题。在文本字段内按“输入”时,一切正常。但是,我有一个跨度(带有背景图像)也可以通过单击事件提交表单。这无法正常工作,我不明白为什么。

这是基本的 HTML:

<form name="myForm">
  <input type="text" name="search" />
  <span id="search-button"></span>
</form>

这是事件监听器的 JS:

function evtSubmit(e) {
  // code
  e.preventDefault();
};

var myform = document.myForm;
if (myform.addEventListener) {
  myform.addEventListener('submit', evtSubmit, false);
}

这是“跨度”及其点击事件的 JS:

var searchButton = document.getElementById('search-button');
if (searchButton) {
 searchButton.onclick = function() {
  document.myForm.submit();
 };
}

注意:span 的点击事件的 JS 在一个单独的 JS 文件中,目前无法访问,因此更改该脚本不太可能。如果解决此问题的唯一方法是更新该文件,我可以...但由于过程超出我的控制范围,这要困难得多。

最佳答案

调用form.submit()时,不会触发onsubmit事件。作为替代方案,您可以将 action 属性设置为 javascript:evtSubmit(event):

function evtSubmit(e) {
  // code
  e.preventDefault();
};

var myform = document.myForm;
myform.setAttribute('action', 'javascript:evtSubmit();');

关于javascript - 提交表单的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841298/

相关文章:

javascript - Twitter Bootstrap 转到嵌套选项卡的特定选项卡

javascript - 覆盖已经附加到事件的函数

asp.net-mvc-3 - asp.net mvc提交表单并在url中显示所有表单参数

javascript - Jquery、Ajax、BeforeSend 和 Show

javascript - 新选项卡中的 Base64 PDF 在刷新前显示空白页

javascript - 如何使用 Javascript 移除 Rails 按钮上的焦点?

jQuery form.submit() 刷新页面而不是提交

angularjs - ng-submit 和 ng-click 之间的区别

javascript - typescript :上下文保存。这样做是个好主意吗?

javascript - 面向对象的 Javascript : event handling