在编译的JS文件上使用Angular JS问题的Bootstrap UI

时间:2013-09-20 13:57:38

标签: internet-explorer twitter-bootstrap angularjs

我正在使用rails app并运行bootstrap ui库。 该应用程序在除< = IE8 ....

之外的所有浏览器上都运行良好

经过一段时间的调查后,我发现生成错误的部分代码:

编译application.js:

 u.bind("keydown",function(t){0!==k.matches.length&&-1!==a.indexOf(t.which)&&(t.preventDefault(),40===t.which?(k.activeIdx=(k.activeIdx+1)%k.matches.length,k.$digest()):38===t.which?(k.activeIdx=(k.activeIdx?k.activeIdx:k.matches.length)-1,k.$digest()):13===t.which||9===t.which?k.$apply(function(){k.select(k.activeIdx)

和UI Bootstrap模板未编译:

 element.bind('keydown', function (evt) {

    //typeahead is open and an "interesting" key was pressed
    if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
      return;
    }

    evt.preventDefault();

    if (evt.which === 40) {
      scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
      scope.$digest();

    } else if (evt.which === 38) {
      scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1;
      scope.$digest();

    } else if (evt.which === 13 || evt.which === 9) {
      scope.$apply(function () {
        scope.select(scope.activeIdx);
      });

    } else if (evt.which === 27) {
      evt.stopPropagation();

      resetMatches();
      scope.$digest();
    }
  });

有谁知道我怎么做 - 至少 - 修复IE8上的这个错误?

谢谢:)

2 个答案:

答案 0 :(得分:1)

幕后可能会有更多,但这是我所相信的。

除了IE的旧版本之外,

evt.which 是大多数浏览器中按键的标准手表。他们的是 window.event.keyCode 。看起来错误可能是因为IE8不处理event.which所以它是一个空值。这可以在 modernizr 或html5垫片中修补(有些人称之为shiv但是shiv是武器而垫片是用于填补小间隙的物品,因此垫片更简洁)。

仔细检查evt是否在传递给函数之前是否有逻辑绑定到window.event(如果存在),else事件。如果没有,你可以尝试类似我以下的黑客攻击。

var evt = evt || window.event;

在幕后可能会有更多,但如果我不得不下注,这就是问题所在。

答案 1 :(得分:1)

感谢@dasper,我找到了一种方法来解决这个UI Bootstrap文件的帮助:

How to fix Array indexOf() in JavaScript for Internet Explorer browsers

现在看起来像这样:

 var keyCode = (window.event) ? evt.keyCode : evt.which;
    var a = jQuery.inArray(keyCode,HOT_KEYS);

    if (scope.matches.length === 0 || a === -1) {
      return;
    }
    .....

并将所有 evt.which 替换为 keyCode var。

在IE8和其他浏览器上充当魅力:)