2014-05-05 30 views
0

我敢打赌,这很简单,但迄今为止我没有运气。我想用跨浏览器跨版本的方式添加事件处理程序。这是我的代码跨浏览器事件处理程序,jQuery不工作

if ($.browser.msie) { 
    if ($(p)[0].addEventListener) { 
    $(p)[0].addEventListener("mousedown", function() { OnMouseDown(); }, true); 
    $(p)[0].addEventListener("mouseup", function() { OnMouseUp(); }, true); 
    $(p)[0].addEventListener("mouseout", function() { OnMouseOut(); }, true); 
    } else if ($(p)[0].attachEvent) { 
    //ie 11 in compatibility mode hits here but not assign events (checked in developer tools(f12)) 
    $(p)[0].attachEvent("onmousedown", function() { OnMouseDown(); }); 
    $(p)[0].attachEvent("onmouseup", function() { OnMouseUp(); }); 
    $(p)[0].attachEvent("onmouseout", function() { OnMouseOut(); }); 
    } 
} else { 
    //this works fine in newer ie and in "normal" mode 
    $(p).mousedown(OnMouseDown); 
    $(p).mouseup(OnMouseUp); 
    $(p).mouseout(OnMouseOut); 
} 

有没有人有任何想法? jQuery不能在兼容模式下工作。

+0

你尝试使用哪个版本的jquery? –

+0

版本1.4.2。这是旧的项目 – Iceman

+0

我想知道为什么你要绑定像这样的事件_while_你正在使用jQuery。或者你为什么使用jQuery,如果你喜欢绑定这样的事件处理程序。此外,$ .browser已从jQuery中删除。 – Ejaz

回答

1

为什么不把事件与.bind附加在一起(我看到它的旧版本的jQuery)?

做这样的事情:

$(p).bind('mousedown', OnMouseDown); 
$(p).bind('mouseup', OnMouseup); 
$(p).bind('mouseout', OnMouseOut); 

编辑:好吧,如果这不起作用,$ .browser也有一个“版本”属性,你可以把新的IE浏览器其他浏览器一样。检查this fiddle

无论如何,尽管不管用户浏览器相关的代码。看看这样做的图书馆:Modernizer

+0

唉,不工作。我想知道,有可能attachEvent不起作用,因为我想通过$(“p”)[0]设置它,或者原因是我后来将它附加到其他dom元素,并将该元素附加到另一个元素 – Iceman