event.returnValue在IE7中给我一个错误
event.returnValue gives me an error in IE7
所以我从错误开始,因为e.preventDefault在IE7中不起作用。我在这里发现event.prventDefault()函数在IE中不起作用,并实现了答案——问题是
event.returnValue = false;
似乎对那里的其他人都有效,但对我不适用!我还投了
if (event.returnValue) {
alert();
}
没有得到任何警告。这是我的代码
$('#share a').click(function(e){
if (event.preventDefault) {
event.preventDefault();
} else {
window.event.returnValue = false;
}
if ($(this).parent('li').hasClass('email')) {
window.open(this.href,'share-this','height=750,width=500,status=no,toolbar=no');
} else {
window.open(this.href,'share-this','height=400,width=500,status=no,toolbar=no');
}
}
当我点击链接时,我在IE7中的三元运算符行上得到一个Invalid参数错误。我知道它正在命中event.returnValue=false;因为我在那里放了一个警报进行调试。
有什么想法吗?
三元运算符不是这样工作的。此声明:
event.preventDefault ? event.preventDefault() : event.returnValue = false;
无效。您应该使用:
if(event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
三元运算符用作r值,而不是一般的if/else语句替换。
此外,对于IE<9您应该使用全局window.event
(window.event.returnValue
)。
更新
事实上,三元运算符在Javascript中似乎是这样工作的(所以它是而不是无效)。根据ECMA规范和IMHO,这仍然是一个"骗局",它损害了代码的可读性(至少对于能够区分左值和右值的程序员来说)。
您的代码看起来就像在使用jQuery。如果您正在处理使用jQ函数绑定的事件,如on
、delegate
或bind
,jQ将为您包装事件对象。您应该可以访问jQ的preventDefault()
、stopPropagation()
和stopImmediatePropagation()
方法,从而使您的三元方法变得不相关
如果您自己绑定事件,请确保event
变量未定义:
elem.onclick = function(e)
{//e should contain the event object, except for IE<9
e = e || window.event;//old IE's set the event as a property on the global object
};
如果你觉得这很糟糕,谁能责怪你,你可以增加Event.prototype
。我这样做是为了支持旧版本IE的代码,它还没有让我失望。。。
三元运算符不能确定如何计算语句event.preventDefault ? event.preventDefault() : event.returnValue = false
。您可能希望JS引擎将代码解释为(event.preventDefault ? event.preventDefault() : event.returnValue) = false
(将false
分配给三进制的结果)或(event.preventDefault ? event.preventDefault() : event.returnValue = false)
(将整个语句视为三进制表达式)。
为了避免这种歧义,将赋值表达式分组,让JS知道赋值是三进制的or
部分:
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
话虽如此,使用三进制作为陈述通常被认为是一种糟糕的做法。一种更常见的编写代码的方法是:
e.returnValue = false;//returnValue is set on Chrome and, I believe FF, anyway
//if some browser Event objects don't have this, there's no harm in adding a property
//if the event object is read-only, the assignment will fail, silently
if (e.preventDefault)
{
e.preventDefault();
}
- 我怎么能把一个错误当作未捕获的错误来记录呢
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- javascript window.location在检查firebug时给了我一个错误的url路径
- new SharedWorker(“whatever.js”)返回一个错误
- JSON.parse给了我一个错误,但JSONLint说它'是一个有效的json
- 有人能向我解释一下我犯的一个错误吗
- Jasmine:测试setTimeout函数会抛出一个错误
- JavaScript中的一个错误
- 为什么jqPlot显示了一个错误的饼图,其中包含通过AJAX检索的数据
- Webrtc和socket.io:createanswer()总是有一个错误.为什么?我的代码连接了两个对等体,但其中只
- 使用 jQuery 构建一个元素会给我一个错误
- Chai 期望 [函数] 抛出一个(错误)未通过测试(使用 Node)
- 在我的 jquery 函数中得到一个错误
- Addeventlistener 已转换为 IE.也许是另一个错误
- 我有一个错误,由于某种原因,号码被更改了,而不是名字
- 我无法建立离子机器人项目..它给了我一个错误:生成cmd enont
- JQueryAJAX调用:304 respose产生一个错误
- 继续得到一个错误,即某个东西不是函数,但找不到原因
- jQuerylib会导致一个错误,直到刷新为止
- HTML图像加载触发一个错误