ajax 动态为<a> href 赋值,总是不执行的原因

来源:互联网 发布:windows最近更改了硬件 编辑:程序博客网 时间:2024/06/05 03:44

问题是这样的:

<a href="JavaScript:void(0)" onclick="loadSalesInfo(this,'<bean:write name="list" property="custNo"/>')">拨打</a>

点击“拨打”,调用loadSalesInfo函数,该函数通过jquery的ajax调用返回是否限制拨打,如代码:

var vlink;function loadSalesInfo(link,salesNo){        var queryUrl="/servlet/AjaxValid";        vlink = link;        jQuery.post(queryUrl,{method:'newChanceControl'},function(result){  var flag = result;  if(flag == '0'){  alert("提示:当前时间不允许外拨!");  return false;  }else{   if(vlink.disabled==false){   vlink.target="leftframe";   vlink.disabled=true;   vlink.href="salesBaseAction.do?method=loadCustForSalesByCustNo&custno="+salesNo;       }else{     vlink.target="";     vlink.href="JavaScript:void(0)";       }  }        });}

现象是vlink.href可以正常执行,但是总是不调用action。经过一天的郁闷,终于知道原因了:因为ajax默认调用是异步的,所以不等ajax调用处理回调函数为href赋值就直接发起了href,所以第一次点击不会调用action,第二次点击的时候会调用action,这是因为第一次ajax执行完成为href赋值了。另外<a> 属性onclick的优先级高于href,所以onclick return false就可以不执行href了。

解决方法:将ajax调用方法改为同步,方法为加上全局变量,声明ajax调用为同步:

$.ajaxSetup({    async : false});

这样href的执行就必须等待function中ajax调用完成后才会触发,就得到了想要的结果。


原创粉丝点击