如何用js在某个元素的某个事件触发时进入新的校验代码,通过时执行源代码,未通过则不执行。

新手上路,请多包涵

是需要写一套通用的页面校验js出来
比如页面上有这个元素

<a id='search' oncliclk='search();'></a>

对应的脚本是

function search() {
    alert('查询');
}

我现在要怎么在不动原来代码的情况下(因为太多了,没办法一个一个页面改),使得在某个按钮的某个事件(比如查询按钮的点击事件)被触发的时候先执行我的校验代码,不通过的话不执行原有的逻辑。
我试着通过jQuery的on方法给按钮绑定上新的点击事件来阻止原事件的继续运行

$('*').on('click', '#search', function(event) {
    // 以下全都无效
    event.stopPropagation();
    event.stopImmediatePropagation();
    event.preventDefault();
    event.cancelBubble = true;
    return false;
})

而且我不知道具体是什么事件,具体是什么标签,这些可能是通过配置或者代码传入进来,我也不知道原来的事件是在什么时候用什么方法绑定上的,这也是上面为什么用$('*')的原因,请教大佬们,有什么方法可以实现么

阅读 2.3k
3 个回答

这其实是一个处理策略的问题,
其实你反过来想,对于某个具体的事件响应处理函数,我们重新调整一下接口处理过程即可,比如,对于你的原始过程

function search() {
    alert('查询');
}

我们调整一下,变成

function Oldsearch() {
    alert('查询');
}
function search() {
    // 验证要求的代码
    if(<验证通过的标志>){
        Oldsearch()
    }
}

这样稍微改造一下即可,原始其它地方的代码都可以不动的。

其实你用原生的 addEventListener 方法即可实现,用 JQuery 之所以不行是因为它在内部的事件管理机制是基于原生自己实现的,并不是用直接用原生方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题