有一次修改智联招聘上面的学历信息,闲着没事想在控制台通过代码控制修改,结果发现死活无法触发选择学历的下拉框的点击事件,于是查看了下事件来源,最后发现是mousedown事件,太狡猾了。
于是淡定的$().mousedown(),居然还不生效?最后终于找到了一种触发原生mousedown事件的方法:
var e = document.createEvent("MouseEvents");
e.initEvent("mousedown", true, true);//这里的mousedown可以换成你想触发的行为
dom.dispatchEvent(e);//这里的dom可以换成你想触发行为的DOM结点
完美,居然就这么实现了
js中添加一个主动触发事件的方法有dispatch。该方法能模拟用户行为,如点击(click)操作等。 标准使用dispatchEvent方法,IE6/7/8则使用fireEvent方法。
dispatchEvent() 方法给节点分派一个合成事件。
语法如下:
dispatchEvent(eventObj)
eventObj 参数是一个描述事件的 ActionScript 对象
在调用 dispatchEvent() 方法之前,必须在代码中对其进行声明,此外,还必须创建一个事件对象以传递给 dispatchEvent()。该事件对象包含侦听器可用来处理该事件的有关信息。
使用时具体流程如下:
creatEvent-------initEvent--------dispatchEvent
最后总结了下兼容ie的写法:
function customTrigger(el ,type){
try{
if(el.dispatchEvent){
var evt = document.createEvent('Event');
evt.initEvent(type,true,true);
el.dispatchEvent(evt);
}else if(el.fireEvent){
el.fireEvent('on'+type);
}
}catch(e){};
};
最后还有个思路,到底怎么防止别人通过代码触发我的点击事件呢?
首先可以写成mousedown事件,其次在事件里面作判断,判断当前鼠标的位置是否在事件绑定元素的范围内,如果不在,则不触发事件~
这样,还有办法触发事件后的逻辑么?