解决jquery的click方法只能触发一次的问题

解决jquery的click方法只能触发一次的问题

先说我的解决方法:一定记得把click方法放在$(function() {...})或者 $(document).ready 中进行绑定!

网站上线一段时间后发现了个一直存在的小问题,虽然不影响整体功能,但是对用户体验还是有一定的影响。

问题现象:

有一个预下载页面,这个页面会列出当前登录用户的所有下载权益,比如:类A资源下载次数,类B资源下载次数;这些权益多项,并且在用户点击下载后这些权益会实时更新,为了方便实现就没有用ajax的方式(因为ajax不刷新页面,回调的时候需要针对性的更新比较麻烦)。

所以实现方式为:用户在预下载页面/pre/down对应的前端html页面为a.html,a页面有一个下载按钮,点击下载按钮后window.location.replace到下载请求地址/now/down接口,该接口对应的前端页面同样是a.html。

此时结果会有两种,1:直接下载成功,没问题,2:controller后台校验不通过,返回msg,前端接到msg后弹出提示;这时候再点击下载按钮就没反应了

    遇到上面问题后刚开始判断可能是后台返回的格式问题,因为这个接口既要实现下载功能同时也要进行普通接口的逻辑处理,所以当时返回的是Object,尝试修改发现并没有解决问题,

    而后推断可能是因为重定向的问题,从controller1跳到controller2前端html没有变但是后台变了,难道变的过程导致html的脚本失效了?后来尝试更改为controller2在校验不通过后从后台直接redirect重定向到controller1进行处理,这样在url中永远就只是controller1(/pre/down)的请求了,但是结果还是不行。

    然后还尝试了在请求完接口后,前端延时两秒刷新页面来激活脚本,也不行!

    最后才发现原来是我的click调用没有写在 $(document).ready 或者简写形式 $(function() {...})中,导致重定向后绑定失效。最后把click方法在线$(function() {...})中,问题解决!