我正在学习JavaScript,无法在不提交表单的表单中生成一个按钮。还有一个类似的问题这里,但是最流行的指定type="button"的答案不适用于我的情况,其他答案涉及到jQuery,我想暂时忽略它。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">
function submit(){
alert("Yo")
}
</script>
</head>
<body>
<form name="myForm" onsubmit="submit()">
<input type="button" value="Submit!" onClick="submit()" />
</form>
</body>
</html>发布于 2016-07-10 21:37:32
由于您没有使用type="submit",所以表单提交任何内容的唯一原因是当单击按钮时,您实际上是在调用submit()方法。(嗯,算是吧。它实际上是form.submit() --您创建的方法是window.submit())。
默认情况下,type="button"的输入不会执行表单提交,除非您真正地调用form.submit()
发布于 2016-07-10 21:21:42
将事件作为参数传递到submit函数中,并防止其默认行为:
function submit(event) {
event.preventDefault();
alert('Yo');
}
onClick='submit(event)'发布于 2016-07-11 01:11:37
自Netscape公司引入Javascript以来,为定义为HTML属性值的表单元素事件处理程序提供了一个特殊的作用域链,在搜索全局对象之前搜索单击的元素和表单元素的属性。这为web程序员提供了方便,并且早于文档对象模型的引入,该模型具有标准化的访问和操作方法。因此
<input type="button" value="Submit!" onClick="submit()" />单击时,执行从HTML属性字符串创建的非命名函数:
function( event) { submit()}它搜索其作用域链以查找submit,并将其作为包围form对象的属性。可能的解决方案包括
第19.1.6款.来自O‘’Reilly的"Javascript最终指南“的第19章中事件处理程序的范围是我能够找到的唯一讨论这一问题的链接。
在@progysm对另一个答复的评论后更新
HTML提供的事件处理程序的作用域链现在在HTML5标准的列表项1.10下被覆盖,它指示处理程序的词法作用域包括单击的元素、它所属的表单(如果有的话)和文档对象。我要提醒您不要过于依赖它:一些浏览器过去常常将单击元素的每个父对象都包含在其作用域链中,而不仅仅是它的表单和文档。
https://stackoverflow.com/questions/38296557
复制相似问题