2013-03-29 48 views
1

有没有人应付这个问题?apply()函数Internet Explorer

代码后,应用在Internet Explorer不执行

originalFocus.apply(this, arguments); 
$(document).scrollTop(300); 

scrollTop的并不在IE浏览器在所有执行!

但如果把警报()例如,将工作

originalFocus.apply(this, arguments); 
alert('ha'); 
$(document).scrollTop(300); 

这里是全码:

(function($) { 
    var originalFocus = $.fn.focus; 
    $.fn.focus = function() { 
     if (this.hasClass('no-scroll')) { 
      var y = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body).scrollTop; 

      originalFocus.apply(this, arguments); 
      $(document).scrollTop(y); 
     } else { 
      return originalFocus.apply(this, arguments); 
     } 
    }; 
})(jQuery); 

ANSWER

好吧,伙计们,我发现一个问题 - 需要返回功能,简单)

(function($) { 
var originalFocus = $.fn.focus; 
$.fn.focus = function() { 

    return function() { 
     if (this.hasClass('no-scroll')) { 
      var y = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body).scrollTop; 

      originalFocus.apply(this, arguments); 
      window.scrollTo(x, y); 
     } else { 
      originalFocus.apply(this, arguments); 
     } 
    }; 

}; 
})(jQuery); 
+4

'originalFocus'做了什么?看起来你正在遇到竞争状况。 –

+0

我们不知道你使用什么样的插件Kosmetika。检查文档,也许.apply()方法有一个回调函数.apply(this,arguments,function(){$(document).scrollTop(300)}); –

+0

apply()是原生js方法,我添加了完整的代码 – Kosmetika

回答

1

有时,试图在事件处理程序中强制焦点会导致问题。尝试在定时器处理程序中执行此操作:

 var this2 = this; 
     setTimeout(function() { 
     originalFocus.apply(this2, arguments); 
     }, 1); 
+0

这不是一个解决方案..问题是scrollTop()方法根本没有执行。它需要在应用原始焦点后立即执行。这段代码的想法并不是在聚焦一个元素之后滚动顶部 – Kosmetika

+0

@Kosmetika以及尝试将'scrollTop()'调用放入超时处理程序中。 (就像我说的,我在这里猜测,但'.focus()'是棘手的。) – Pointy

+0

没有什么区别))只有等待一段时间才能执行) – Kosmetika