《form表单中的按钮和不在表单中的按钮》

Posted on 2017-10-12 17:32  yasuo2017  阅读(964)  评论(0)    收藏  举报

在自学API的时候,自己写了前台来调用测试API,然后在前台表单中写了按钮id="up1"(没有指定submmit类型),表单外也写了一个按钮id="up2"

 1 <div>
 2         <form>
 3             订单号:<input type="text" name="orderId" id="orderId"/>
 4             <br /><br />
 5             运单号:<input type="text" name="mailNo" id="mailNo"/>
 6             <br /><br />
 7             源地址:<input type="text" name="origincode" id="origincode"/>
 8             <br /><br />
 9             目的地:<input type="text" name="destcode" id="destcode"/>
10             <br /><br />
11             筛选结果:<input type="radio" name="filterResult" id="filterResult" value="1" />人工确认
12             <input type="radio" name="filterResult" id="filterResult" value="2"  />可收派
13             <input type="radio" name="filterResult" id="filterResult" value="3" />不可收派
14             <br /><br />
15             签回单号:<input type="text" name="returnTrackingNo" id="returnTrackingNo"  />
16             <br /><br />
17             <button id="up1">提交1</button>
18         </form>
19     </div>
20     <div>
21         <button id="up2">提交2</button>
22     </div>
View Code

然后给两个按钮同时绑定了一个单击事件,在事件中通过ajax进行访问写好的API

 1  $("#up1,#up2").click(function () {
 2                 //var postdata = { orderId: $("#orderId").val(), mailNo:$("#mailNo").val(), origincode: $("#origincode").val(), destcode: $("#destcode").val(), filterResult: $("#filterResult").val(), returnTrackingNo: $("#returnTrackingNo").val() }
 3                 $.ajax({
 4                     type: "get",
 5                     url: "/api/sf/Getffff",
 6                     contentType: "application/json",
 7                     //data: JSON.stringify(postdata),
 8                     success: function (data, status) { 
 9                         if(status=="success") 
10                         {
11                             alert("33")
12                         }
13                         }
14                 })
15             })
View Code

下面是API的代码(没有任何功能,只是单纯的演示)

1  [HttpGet]
2  public string Getffff()
3 {
4      return "";
5  }
View Code

当运行前台页面点击按钮id="up1"的时候,

 

会正确运行API,并且弹框显示,但是,当点击弹框上的确定按钮的时候,页面就会自动刷新,并且有这个警告

[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

大致意思就是把一个http请求放到了主线程上来执行,影响了用户体验。

这是点击按钮后的地址栏信息

http://localhost:61439/SFMVC/OrderResult?orderId=&mailNo=&origincode=&destcode=&returnTrackingNo=

看到浏览器的地址栏才知道,在form中的按钮,会自动向后台提交表单中的数据,执行submmit类型的提交,不论有没有指定action。

但是单击在表单外的id=“up2”的按钮,会正常调用API,并且弹框,没有之后的刷新页面,也没有任何的警告信息。

解决方案:

像这种在表单中的按钮的提交想要正确执行的话,需要在form中指定 onsubmit="return false"就可以了,这样就是先执行按钮的绑定的单击事件,然后再执行表单的提交的时候,就不会再次刷新页面了。

1 <form  onsubmit="return false">
View Code

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3