浏览器暂停ajax访问,前端js ajax请求阻止浏览器的默认行为

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。

1.阻止浏览器的默认行为

function stopDefault(e) {

//如果提供了事件对象,则这是一个非IE浏览器

if(e && e.preventDefault) {

//阻止默认浏览器动作(W3C)

e.preventDefault();

} else{

//IE中阻止函数器默认动作的方式

window.event.returnValue = false;

}

returnfalse;

}

2.停止事件冒泡

function stopBubble(e) {

//如果提供了事件对象,则这是一个非IE浏览器

if(e && e.stopPropagation) {

//因此它支持W3C的stopPropagation()方法

e.stopPropagation();

} else{

//否则,我们需要使用IE的方式来取消事件冒泡

window.event.cancelBubble = true;

}

returnfalse;

}

具体应用实例:写好的一个项目,今天交给用户使用,返回了一大堆问题,其中有一个很精典:

一个页面,有一个表单,用来提交表单的按钮是个button,用jquery来响应这个按钮的点击动作,通过post提交,供用户输入的是一个文本框,用户输入完要填的东西之后,直接按回车键,就相当于按了那个button,刚开始没注意这个问题,一按回车,就跳转到了另外一个页面,查了很多资料,才发现要阻止浏览器的默认行为,,因为SUBMIT的默认行为是提交表单,那么你的JS就不会执行了。所以先取消默认行为。然后执行你的JQ来提交。具体的我也说不清楚,只知道若文本框的type="submit",直接点击按钮的时候就会跳到另外一个页面,若type="button",则点击按钮的时候不会出现这样的情况,可按回车键的时候会跳到另外一个页面,解决方法,看下面代码:

jsp代码:

js代码:

function enter_down(form, event) {

if(event.keyCode=="13") {

stopDefault(event);

submitForm(form,'actionDiv');

}

}

function stopDefault(e) {

//如果提供了事件对象,则这是一个非IE浏览器

if(e && e.preventDefault) {

//阻止默认浏览器动作(W3C)

e.preventDefault();

} else{

//IE中阻止函数器默认动作的方式

window.event.returnValue = false;

}

returnfalse;

}

通过上面的代码就可以实现按回车的时候相当于点击“提交”按钮。且上面的代码兼容IE、FF浏览器。

有时候遇到需要屏蔽浏览器的一些快捷键行为时,比如说:ff下按Backspace键,会跳到上一个浏览器的历史记录页面;

注意要在onkeydown事件中调用stopDefault(event)函数,在onkeyup事件中调用是不成功的。

<a onclick="toggleFriendFuncList(event, '6708062', 'he');">a>

由于href是空值,如果不阻止浏览器的默认行为,产生的效果就是刷新页面。

现在我们需要做的就是阻止href的链接事件,而去执行onclick事件。

老的处理方式:

<a onclick="toggleFriendFuncList(event, '6708062', 'he');" href="javascript:void(0);">a>

jquery的写法:

1)return false:In event handler ,prevents default behavior and event bubbing 。

return false 在事件的处理中,可以阻止默认事件和冒泡事件。

2)event.preventDefault():In event handler ,prevent default event (allows bubbling) 。

event.preventDefault()在事件的处理中,可以阻止默认事件但是允许冒泡事件的发生。

3)event.stopPropagation():In event handler ,prevent bubbling (allows default behavior).

event.stopPropagation()在事件的处理中,可以阻止冒泡但是允许默认事件的发生

prototype的写法:

Event.stop(event)

用法介绍:

事件发生后,浏览器通常首先触发事件发生元素上的事件处理程序,然后是它的父元素,父元素的父元素……依此类推, 直到文档的根元素为止。这被称为 事件冒泡,是事件传播的最常见的方式。当处理好一个事件后, 你可能想要停止事件的传播,不希望它继续冒泡。

当你的程序有机会处理事件时,如果这个事件具有 默认行为,同时浏览器也会处理它。例如,点击导航链接、 将表单提交到服务器、在一个单行文本框中按下回车键等等。如果对这些事件你定义了自己的处理方式, 可能会非常希望阻止相关的默认行为。

但是,有时候还是不能解决相应的问题,明明已经调用了阻止浏览器默认行为的方法,可在按回车的时候还是会调用默认行为,最终也没有找到问题所在,只好把回车键禁用了,实际上是用Tab键代替回车键。代码如下:

//若为回车键

if( event.keyCode ==13) {

//改成Tab键,这样每次按回车都起到了Tab的功效,光标跳到下一个对象

event.keyCode = 9;

}

//禁用Enter键表单自动提交

document.onkeydown = function(event) {

var target, code, tag;

if(!event) {

event = window.event; //针对ie浏览器

target = event.srcElement;

code = event.keyCode;

if(code ==13) {

tag = target.tagName;

if(tag =="TEXTAREA") {returntrue; }

else{returnfalse; }

}

}

else{

target = event.target; //针对遵循w3c标准的浏览器,如Firefox

code = event.keyCode;

if(code ==13) {

tag = target.tagName;

if(tag =="INPUT") {returnfalse; }

else{returntrue; }

}

}

};

具体用法试例:

HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">

高德软件

function gotoPage(currentPage,form) {

goto_Page(currentPage,form,"actionDiv");

}

function addAppGrp(){

$("#actionDiv").load("${contextPath }/pages/manage/business/add.jsp");

$("#chance_search_div").hide();

}

function modifyAppGrp(idName){

var id=encodeURIComponent(idName);

var url = contextName + "/appGrpAction.do?method=addAppGrp&appGrpName="+id;

retrieveURL(url,'actionDiv');

$("#chance_search_div").hide();

}

function savebusiness(thisForm){

var name = $("#appGrpName").val();

if(name.trim()==""){

alert("分组名称不能为空。");

return;

}

submitForm(thisForm,null,afterSave);

return;

}

function afterSave(content){

if(content!=null&&content!=""){

var arr = content.split(",");

if(arr[0]=="true"){

$("#chance_search_div").show();

//当前结点

var itemId = "0::"+ $("#appGrpName").val();

//父结点,因为只有添加根应用分组时才会执行这个方法,所以父结点统一为-1

var parentId = -1;

//当前结点显示名称

var itemText = $("#appGrpName").val();

//添加新结点

tree.insertNewChild(parentId, itemId, itemText, doOnClick, 'myfolderClosed.gif','myfolderOpen.gif','myfolderClosed.gif');

retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");

return;

}

alert(arr[1]);

return;

}

alert("保存失败");

return;

}

function deleteBusiness(thisForm,idName){

if(confirm("确认要删除么?")){

var id=encodeURIComponent(idName);

retrieveURL("${contextPath}/appGrpAction.do?method=deleteAppGrp&appGrpName="+ id,null,null,function(content){

if(content!=null&&content!=""){

var arr = content.split(",");

if(arr.length==3&&arr[2]=='y'){

var msg = "该应用组下有应用,要强制删除么?";

if(confirm(msg)){

retrieveURL("${contextPath}/appGrpAction.do?method=forceDelAppGrp&appGrpName="+id,null,null,afterForceDel);

}

return;

}

if(arr.length==2){

if(arr[0]=="true"){

//当前结点

itemId = "0::"+ idName;

tree.deleteItem(itemId);

retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");

return;

}

alert(arr[1]);

}

return;

}

alert("删除失败");

return;

});

return;

}

}

function afterForceDel(){

if(content!=null&&content!=""){

var arr = content.split(",");

if(arr[0]=="true"){

monitorTree();

retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");

return;

}

alert(arr[1]);

return;

}

alert("保存失败");

return;

}

function enter_down(form, event) {

if(event.keyCode=="13") {

stopDefault(event);

submitForm(form,'actionDiv');

}

}

function stopDefault(e) {

//如果提供了事件对象,则这是一个非IE浏览器

if(e && e.preventDefault) {

//阻止默认浏览器动作(W3C)

e.preventDefault();

} else{

//IE中阻止函数器默认动作的方式

window.event.returnValue = false;

}

returnfalse;

}

    查询

名称

οnblur="javascript:isSpecialChar(this);"οnkeydοwn="enter_down(this.form, event);"/>

οnclick="javascript:submitForm(this.form,'actionDiv');"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值