网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月09日漏签0天
javascript吧 关注:269,261贴子:906,458
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回javascript吧
>0< 加载中...

js事件的参数能否添加信息

  • 取消只看楼主
  • 收藏

  • 回复
  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
比如click事件的回掉参数function(e),我想给e添加个属性i i里的值为1,无论怎么点。在回调函数里都能取到这个e.i==1,有办法吗。


  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@次碳酸钴


2025-06-09 10:22:11
广告
  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
var e=e||window.event; //先拿到浏览器自己的事件对象
这不是可以么- -


  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
惊人发现---对我个人来说,大神见笑了
<html>
<body>
</body>
<script>
function b(e){ //当地图被点击时:
var s=e||window.event; //先拿到浏览器自己的事件对象
s.point=12
var z =s ;
z.pc = 55;
} var input = document.createElement("input");
document.body.appendChild(input);
document.addEventListener('click',b,true); //true代表捕获
input.addEventListener('click',a,true);
function a(e){
alert(e.point);
alert(e.pc)
} </script>
</html>
-----结论,e只是个地址,指向了实际对象(姑且这么理解),也就说想给e添加啥属性就添加啥属性 lxjts1 兄弟的"拿不到 那是浏览器自己的事件对象 无法染指 "好像不太对,欢迎讨论。


  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
确实有几个地方没太弄懂,按照我的理解 var e=e||window.event 你的这句意思是自己创建了个副本e 如果不通过这句进行手动调用this.click.apply(window,e); 那么原来在marker上定义的方法调用的e还是原来的mouseEvent,不会有新的增加的属性,但是实际上属性已经添加到e上了,不用this.click.apply(window,e)这句了
而且这句一旦调用,应该必须阻止继续传播了吧,否则在map上手动调了一次,事件捕获从外层map到达marker里又被捕获到又会调用一次。
还有个疑问 你说在Marker 初始化时将this保存到一个变量that里,按我的理解是这样写
'MARKER ':function(){
//假设地图节点为map
var that = this;
map.onclick=function(e){ //当地图被点击时:
var e=e||window.event; //先拿到浏览器自己的事件对象
e.point=getPosition(); //污染对象,使它的point等于百度自己获得的坐标
if(typeof that.click==='function'){//检查用户是否定义了上下文的click
that.click.apply(window,e); //如果定义了click,则把污染后的事件传进去
}
那么就会出现一个问题,当你点击地图的时候,哪怕没有点击到marker上,也会弹出个alert框显示坐标信息,而实际的坐标根本不是marker的坐标。
可能我的理解有误,请指教。


  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
又想了下,假设事件真的不可修改也有办法,只是麻烦点。就不写代码了,用语言描述下
假设事件是冒泡传播的
首先设置一个全局变量i=1;
发生点击
到达marker
marker检验i的值,如果为1 不alert 而是给map进行click事件绑定 设i=2
事件继续向上冒泡,到达map,map已经被定义了监听方法,所以捕获到该事件后执行方法,在该方法里给e赋值 ,调用apply 或者 call方法手动调用marker上的click方法 marker上的click方法里 判断 如果i==2 alert(e.point) 然后去掉map上的监听事件 将i改为1 结束。


  • 死灵书
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
<html>
<body>
<input id = "a"></input>
</body>
</html>
<script>
var input = document.getElementById("a");
document.addEventListener('click',a,true);
input.addEventListener('click',b);
function a(e){
var e1=e||window.event;
e1.i=100;
}
function b(e){
alert(e.i)
}
</script>
我觉得实际没必要弄的那么复杂,我这个点击input就能获得e.i的值为100,换成baidu地图就是在map.js里给document添加个监听方法,不管点那儿都给e添加个point属性。然后你爱咋取咋取,反正e里已经有point属性存在了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回javascript吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示