首先: 带括号表示执行一次方法,不带括号表示 该方法对象
例如表单在提交时的 onsubmit事件:以表单submit 时 使用弹出确认框确认为例!
onsubmit 属于form表单提交时的默认触发事件,返回false对表单的提交可以进行阻断,返回其他值或不返回不会进行阻断
1.HTML中绑定事件
<!-- 1.不带括号 --> <form action="#" id="form1" onsubmit="myfunction" method="post"> <input type="submit" value="提交"> </form> <!-- 此时等同于: onsubmit(){ myfunction; } 既不会对提交事件进行阻断,也不会执行myfunction方法 --> <!-- 2.带括号 --> <form action="#" id="form2" onsubmit="myfunction()" method="post"> <input type="submit" value="提交"> </form> <!-- 此时等同于: onsubmit(){ myfunction(); } 不会对提交事件进行阻断,但是会执行myfunction方法 --> <!-- 3.return + 带括号 --> <form action="#" id="form3" onsubmit=" return myfunction()" method="post"> <input type="submit" value="提交"> </form> <!-- 此时等同于: onsubmit(){ return myfunction(); } 可以对提交事件进行阻断,也会执行myfunction方法 --> <script> function myfunction() { return confirm('确认提交?'); } </script>
在标签中赋值,及默认将赋值内容添加到 onsubmit方法的方法体中。
2.JS中添加绑定事件
<form action="#" id="form4" method="post">
<input type="submit" value="提交">
</form>
<script>
function myfunction() {
return confirm('确认提交?');
}
<!--
1.错误写法
-->
document.getElementById("form4").onsubmit = myfunction();
<!--
= 为赋值操作
myfunction()代表执行方法
此时,将此onsubmit 的引用指向 myfunction方法的执行结果(返回值),虽然执行不会报错,但并未起到阻断效果
-->
<!--
1.正确写法
-->
document.getElementById("form4").onsubmit = myfunction;
或
document.getElementById("form4").onsubmit = function () {
return confirm('确认提交?');
}
<!--
此时的 myfunction 代表方法对象
将此onsubmit 的引用指向 myfunction 方法对象 或 匿名方法对象
可简单理解为
原:提交执行
Form.submit(){
return onsubmit();
}
更改引用指向后:提交执行
Form.submit(){
return myfunction();
}
-->
</script>
本文仅为个人理解,如理解有误还望指出!