跨浏览器事件处理程序,jQuery无法正常工作

时间:2014-05-05 13:36:54

标签: javascript 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无法在兼容模式下工作。

1 个答案:

答案 0 :(得分:1)

为什么不直接用.bind附加事件(我看到它的旧版jQuery)?

做类似的事情:

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

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

无论如何,尽量不要使用浏览器相关代码。看看为您做这件事的图书馆:Modernizer