firefox得到event了,但是为何event.clientX还是为undefined?

KG071 2011-05-31 03:48:05

function(e){
if(!e) e = window.event;
alert(e);
alert(e.clientX + " " + e.clientY);
...
}


我使用如上的传参数形式,在firebug下看到e是unload,这说明已经得到了event ,但是为何调用e.clientX 却得到undefined

还有 e.clientX<0&&e.clientY<0 这是什么意思?
...全文
1395 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xahuo 2013-05-18
  • 打赏
  • 举报
回复
FF需要另行判断,你用这个方法就完美解决了。 document.onmousemove = function(evt) { if (typeof evt == 'undefined') { myEvent = window.event; } else { myEvent = evt; } if(myEvent.clientX){ posX = myEvent.clientX+document.body.scrollLeft; posY = myEvent.clientY+document.body.scrollTop; } else if(myEvent.pageX){ posX = myEvent.pageX+window.pageXOffset; posY = myEvent.pageY+window.pageYOffset; } }
风雨潇潇 2012-08-02
  • 打赏
  • 举报
回复
function showcontent()
{
var evt=SearchEvent();
alert(evt);
}
function SearchEvent()
{
func=SearchEvent.caller; //回调函数:回去调用showcontent()方法
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event) // 如果就是event 对象

return arg0;
}
func=func.caller;
}
return null;
}
风雨潇潇 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

ff不支持window.event,只支持event
[/Quote]
如果firefox在不支持event的话,最好的解决办法就是在事件参数里面加上event的参数即可
,还有IE不支持eventX,IE,fireFox两者都支持clientX
小鸡捉老鹰 2012-04-11
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

</head>

<body>
<button onclick="test()">test</button>
</body>
</html>
<script type="text/javascript">
<!--



function getEvent()
{
if(document.all)
return window.event;
func=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0)
{
if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
{
return arg0;
}
}
func=func.caller;
}
return null;
}

function test()
{
e=getEvent();

alert(e.clientX);
}


//-->
</script>
KG071 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 toury 的回复:]

年轻就是气盛,赞一个。不过太过气盛难免偏颇,呵呵。顺便说下,“靠session过期来判断在线人数”和我说的根本无关。我说的是:firefox 判断鼠标位置剔除刷新就没可能了
[/Quote]

firefox该怎么判断?
KG071 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 rainsilence 的回复:]

引用 12 楼 kg071 的回复:

HTML code

window.onbeforeunload = function(){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b &amp;&amp……
[/Quote]

那该怎么判断在线人数?
rainsilence 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kg071 的回复:]

HTML code

window.onbeforeunload = function(){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b && wi……
[/Quote]

你这个区分刷新和关闭的问题,我们以前没少回帖。。不行就是不行。。。区分用的是ie上的 特性,也可以说是bug。就算是360上有用了。还有chrome ff opera等。
KG071 2011-06-01
  • 打赏
  • 举报
回复

window.onbeforeunload = function(){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b && window.event.clientY < 0 || window.event.altKey){
alert("是关闭而非刷新");
window.event.returnValue = "是否关闭?";
}else{
alert("是刷新而非关闭");
}
}


这个能区分刷新和关闭了,但是它只对IE6有用,对360浏览器无效,不知道为什么
toury 2011-06-01
  • 打赏
  • 举报
回复
9楼才进入问题的核心。google或本站查询吧。这个问题我以前没少回帖
toury 2011-06-01
  • 打赏
  • 举报
回复
年轻就是气盛,赞一个。不过太过气盛难免偏颇,呵呵。顺便说下,“靠session过期来判断在线人数”和我说的根本无关。我说的是:firefox 判断鼠标位置剔除刷新就没可能了
KG071 2011-06-01
  • 打赏
  • 举报
回复

<script language="javascript">
window.onbeforeunload=function() {
alert("1");
alert("2");
alert(event.clientX);
alert("3");
alert("4");
}
</script>

<html>
<body>
fuck
</body>
</html>



自己在360浏览器下做了测试,如果是刷新5个alert都执行,但是关闭浏览器的话就好像都不执行了 ,只听到一声alert的声音 然后没了 不知道这个该怎么解释
KG071 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 toury 的回复:]

你在搞关闭浏览器的提示(剔除刷新影响)吧?
1、别用onunload(), 用onbeforeunload();
2、FF下就是有这个问题,它抓的事件不是MOUSE的事件,而是onbeforeunload,或onunload,所以判断鼠标位置剔除刷新就没可能了
[/Quote]

我用onbeforeunload了,也进入了remove方法,我的remove方法是这样写的:


function removeline(e){
if(!e) {
e = window.event;
}
if(e.clientX<0&&e.clientY<0) {
alert("remove 3");
document.write('<iframe width="100" height="100" src="remove.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>');
alert("remove 4");
document.all.WebBrowser.ExecWB(45,1);
alert("remove 5");
}
}

我在360浏览器下(或者IE6下)关闭浏览器,alert语句根本不执行,这是怎么回事?
KG071 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 toury 的回复:]

你在搞关闭浏览器的提示(剔除刷新影响)吧?
1、别用onunload(), 用onbeforeunload();
2、FF下就是有这个问题,它抓的事件不是MOUSE的事件,而是onbeforeunload,或onunload,所以判断鼠标位置剔除刷新就没可能了
[/Quote]

firefox 判断鼠标位置剔除刷新就没可能了 ? 不会吧? 你不是悲剧了? 那腾讯或是那些大网站是靠session过期来判断在线人数的?
huangwenquan123 2011-05-31
  • 打赏
  • 举报
回复
ff不支持window.event,只支持event
huangwenquan123 2011-05-31
  • 打赏
  • 举报
回复

<!--测试了下木有问题-->
<span id="show"></span>
<script type="text/javascript">
window.document.onmousemove=function(e){
e=e||window.event;
document.getElementById("show").innerHTML="X:"+e.clientX+"Y:"+e.clientY;
}
</script>
toury 2011-05-31
  • 打赏
  • 举报
回复
你在搞关闭浏览器的提示(剔除刷新影响)吧?
1、别用onunload(), 用onbeforeunload();
2、FF下就是有这个问题,它抓的事件不是MOUSE的事件,而是onbeforeunload,或onunload,所以判断鼠标位置剔除刷新就没可能了
豪情 2011-05-31
  • 打赏
  • 举报
回复
<div id="handler" style="position:absolute;width:100px;height:100px;background:#efefef;border:1px solid #ccc;"></div>
<script type="text/javascript">
var handler = document.getElementById('handler');
document.onmousemove = function(event){
var e = event ? event : window.event;
handler.style.top = e.clientY + 20 + 'px';
handler.style.left = e.clientX + 20 + 'px';
}

</script>
牛仔十三 2011-05-31
  • 打赏
  • 举报
回复
要看你这个方法的执行环境 了。。。。。。
rainsilence 2011-05-31
  • 打赏
  • 举报
回复
只有鼠标事件才能得到clientX

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧