如何使用addEventListener()将处理程序分配给HTML表单的Submit按钮,类似于分配按钮的’onclick’属性,而不触发表单的默认commit()行为?
将自定义函数分配给“提交”按钮的“
onclick”属性没有问题。定制函数执行各种步骤,然后创建一个Ajax请求对象,并使用该对象将数据发送到服务器。默认的commit()行为不会触发。
submitButton.onclick = function() {
mySubmit();
return false;
};
function mySubmit() {
//do stuff
notTheDefaultUrl = generateNonStandardUrl();
request = GetStandardAjaxRequestThingamabob();
request.open("POST", notTheDefaultUrl, true);
request.onreadystatechange = myHandler;
request.send(formData);
return false;
}
但是使用addEventListener(),浏览器两次提交请求-
一次是在Ajax请求对象下,另一次是使用默认的HTML表单commit()行为。(我可以告诉b / c
mySubmit函数将数据发送到与默认URL不同的URL上,但是默认和Ajax url都出现在服务器日志中。)
var func = window['mySubmit'];
submitButton.addEventListener('click', func, false);
我知道分配给按钮的函数必须返回’false’,以防止触发默认的commit()行为。我以为mySubmit()做到了这一点,并且我尝试编写通过addEventListener传入的函数以更明确地返回false(而不是’func’,’function(){mySubmit();
return false}’),但是这些dosn也不行。
那么我该怎么做呢?
更新
对Peter的评论提出了一些浏览器兼容性问题。另外,IE不支持addEventListener()。这段代码解决了这些问题。我已经在Firefox和IE
8中对其进行了html" target="_blank">html" target="_blank">测试。
function func( event ) {
if ( event.preventDefault ) { event.preventDefault()};
event.returnValue = false;
// do whatever
}
if (submitButton.addEventListener) {
submitButton.addEventListener('click', func, false);
}
else {
submitButton.attachEvent('onclick', func);
}
不好意思的新手格式化。
您需要在处理函数中接收该事件,并阻止该事件执行其默认行为。这适用于click
事件,submit
事件-实际上是任何可取消的事件。
// using your example
submitButton.addEventListener('click', func, false);
// here's what func should look like
function func( event )
{
if ( event.preventDefault ) event.preventDefault();
event.returnValue = false;
// do whatever
}
我有一个RESTAPI,我不想强迫客户端发送请求参数。我有将近400个api方法,我不想将所有参数设置为“required=false” 我想覆盖Spring RequestParam的默认行为。我想将RequestParam接口的“required”属性的默认值设置为“false”。 有什么方法可以覆盖它吗?如果我不能或这不是最佳实践,有什么方法可以解决上述问题。
我需要定制的工件安装,不知道如何覆盖默认的(从默认的maven生命周期)。所以我的问题是: 如何在我的pom.xml中配置maven install插件,使其不进行默认安装并执行我的自定义安装文件目标? 我尝试了没有id和默认安装id,但没有帮助。 更新:从提供的答案 - 这对我不起作用(我在日志中看到两次安装尝试)。
问题内容: 我已经在现有的mysql数据库中反映了表的负载。我想表示的是,任何表中具有特定名称的任何列默认为datetime.now()。但是,天真地遍历表和列,仅对那些我发现具有特定名称的表和列设置默认设置是行不通的。session.flush()我收到以下错误: 这似乎与对_set_parent的调用(以及在sqlalchemy.schema的第721行中的调用)有关。 有谁知道是否有办法做到
问题内容: 我已经能够覆盖所有名称以“ android:”为前缀的主题,但是Android themes.xml还定义了似乎无法被覆盖的属性。例如: colorTheground是在Theme.Light xml中定义的,但是在此处添加它可以使我 错误。如何为整个应用程序覆盖该样式? 问题答案: 您可以用修改属性(如)的方式覆盖标准属性,只是不要忘记添加如下前缀:
问题内容: 我想覆盖Java外观。我只想显示不同的按钮。 我想要Windows Look and Feel的所有功能,但仅按钮有所不同。希望你明白我的意思。 还告诉我如何制作圆形的JtabbedPane ??? 问题答案: 自定义GUI类 调用您的自定义GUI类
问题内容: 我有一个模板与此: Django自动将此翻译为Terminarsesión西班牙语。但是,我想将其翻译为Cerrarsesión。 我试图将此文字添加到.po文件中,但是在编译消息时出现错误,指出该文字重复。 有没有一种方法可以更改/覆盖默认的Django翻译? 谢谢。 问题答案: 最简单的方法是收集在django.contrib.admin语言环境文件夹中找到的.po文件,然后重新编