我正在更新在提交表单的某些页面上具有多种不同按钮类型的现有应用程序。我需要每个按钮才能在提交表单之前执行一些javascript。我将我的js代码放在表单的onsubmit
事件中,但并非所有按钮都执行它。我创建了一个示例,显示了所有提交表单的3个不同按钮。按钮1和3将显示我在表单的onsubmit
事件中输入的警报。按钮2没有。我知道我可以在onclick
调用之前将警报代码放在submit()
按钮2中,但我确实需要一种与所有按钮一致的方法。我需要所有按钮来执行示例中的警报,我想在一个地方更新代码并使其适用于提交此表单的所有按钮。这可能吗?如果我需要提供更多信息,请告诉我。
代码:
<html>
<body>
<form name="form1" action="x.html" method="get" onsubmit="alert('onsubmit javascript executed');">
<br><br>
<input type="submit" value="1. html input type submit">
<br><br>
<input type="button" value="2. html input type button with onclick" onclick="document.form1.submit();">
<br><br>
<button style="width:180px;margin-right:5px;height:30px" onclick="document.form1.submit();">
3. html button with onclick
</button>
</form>
</body>
</html>
更新:2014年1月15日 感谢您的想法,但不幸的是,它没有解决创建一个适用于可能导致提交事件的所有按钮的解决方案的问题。我昨天花了一整天时间根据乔丹和本杰明的反应尝试了不同的选择,但仍然没有运气。所以我想我会后退一步解释为什么我要做我要问的事情。
我有一个经典的ASP应用程序。在需要用户输入的页面上,我收到许多用户超时,当他们点击提交页面的按钮时,他们会丢失信息。所以我在页面上添加了一个javascript计时器,首先警告用户他们即将超时,然后让他们知道他们已经超时,以便他们可以将他们的工作复制并粘贴到其他地方以保存它。关键是这个应用程序的设计方式是大多数页面都提交给隐藏的iframe,这样就不必重新加载页面了。如果用户超时他们不知道它,因为它发生在隐藏的iframe中,他们认为应用程序只是锁定了。
我解决这个问题的方法是在页面上创建一个javascript计时器。它创建一个变量,其中包含页面加载的开始时间,并在设定的时间每秒显示一条javascript消息。我设置它并且效果很好,但有一个例外。如果用户提交了一个页面(隐藏的iframe),他们的会话超时会被重置,但我跟踪时间的javascript变量却没有。这会导致他们在没有真正超时时收到超时消息。我的第一个想法是,这将是一个简单的修复,因为在页面加载后,我可以编写一个javascript函数,找到每个表单onsubmit事件并添加一行代码来更新我的计时器变量。但是,基于我原来的问题,这是一个问题,因为如果按钮不是提交按钮,即使它调用表单的submit()函数,也不会调用onsubmit事件表单。理想情况下,我想提供可以添加到每个表单页面的代码,这些代码不需要对该页面进行任何其他更新。
除非有人有更好的想法,否则我认为我必须更新每个页面上的一些现有代码。对于任何<input type=submit>
或<button type=submit>
,对表单的onsubmit的更新很好,并且由我添加到查找所有表单并更新onsubmit事件的页面的javascript代码自动处理。但是对于每个<input type=button>
和<button type=button>
,我将不得不手动检查它们的onclick事件以及它可能调用的每个函数,以查看它是否调用了submit()函数。如果确实如此,那么我必须像Jordan指出的那样做,并调用一个函数,我可以在调用submit()之前输入我的代码。
我们赞赏任何解决我的问题或提出不同方法的想法。再次感谢。
答案 0 :(得分:0)
也许您可以在非标准按钮上从事件处理程序提交表单,并事先执行代码:
HTML
<button onclick="formSubmitHandler()">Submit</button>
JS
function formSubmitHandler() {
// your code
document.form1.submit();
}