<form action="stuController">
<input type="text" name="name" id="name"><br>
<input type="text" name="sex" id="sex"><br>
<input type="submit" value="提交" >
<input type="button" value="ajax" onclick="submit()">
<input type="button" value="ajax1" onclick="submit1()">
</form>
这两个函数除了名字多了一个1真的是没区别了,但是submit函数报400错误,
submit1没错,我开始以为我submit中的东西写错了但是我删除了以后,只写了一个alert还是400,我照着写了一个submit1,这个submit1不报错,我想问下,这个我真是不知道他为什么会400
<script type="text/javascript">
$("p").css('color', 'blue');
var name=$("#name").val();
var sex=$("#sex").val();
var stu={name:name,sex:sex};
var jsonStu=JSON.stringify(stu);
function submit1(){
alert("dsa");
}
function submit(){
alert("dsa");
}
</script>
因为在html标签中用 onxxxxx="......" 方式设置的事件所生成的事件函数外会多包上两层或三层作用域。类似于:
with(document) {
with(当前元素所在的form) {//只有当前元素是表单元素,并且当前元素包含在form内才会有这一层作用域
with(当前元素) {
当前元素.onclick = function(event){
submit()
}
}
}
}
这样在事件函数中访问一个关键字(变量或函数)时,会先在事件函数作用域中找,没有则往上一层作用域也就是当前元素的作用域中找。还没有则再往上一层中找。所有的作用域都没有时才会到全局作用域(window)中找。
你访问submit()时,由于当前元素所在的form(作用域)中就有一个submit方法。所以是调用form的submit方法。而不会去调用全局作用域中的submit函数。
可能是跟js或jquery默认的submit函数名称冲突了,优先调用它们提供的,而不是你定义的,建议换个函数名称。