[英]Why does my JQuery fading slider not work on any IE type?
我的JQuery滑块在IE中不起作用(在任何文档模式中)。 我怎么能解决这个问题? 按下按钮后,我的代码会向下滑动一段文本(它也很好地淡入)。 IE控制台给我这个错误: "Object doesn't support property or method 'fadingSlideToggle'".
(function ($) {
$.fn.fadingSlideToggle = function ($el, options) {
var defaults = {
duration: 500,
easing: 'swing',
trigger: 'click'
};
var settings = $.extend({}, defaults, options)
$selector = $(this).selector;
return this.each(function () {
var $this = $(this);
$(document).on(settings.trigger, $selector, function (e) {
e.preventDefault();
if ($($el).css('display') == 'none') {
$($el).animate({
opacity: 'toggle',
height: 'toggle'
}, settings.duration, settings.easing);
} else {
$($el).animate({
opacity: 'toggle',
height: 'toggle'
}, settings.duration, settings.easing);
}
});
});
};
})(jQuery);
我想知道哪个部分不受支持,以及如何解决它。 非常感谢!
编辑:这是我调用该函数的代码(它适用于firefox和chrome):
<button class="btn-custom btn-lg"" id="clickedEl"><span>Why rate/review websites?</span> </button></br>
<nav role="navigation" id="toggleEl">/*non relevant html*/</nav>
其余的javascript:
$(function(){
$('#clickedEl').fadingSlideToggle('#toggleEl');
});
JSFiddle在IE中不起作用: http : //jsfiddle.net/3ymvv
问题似乎来自jQuery 1.10.1( #13936 #13980 )。 这是我们得到的错误:
访问被拒绝 - jQuery-1.10.1.js,行:1513,列:2
和相关的行:
// Support: IE>8
// If iframe document is assigned to "document" variable and if iframe has been reloaded,
// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
if ( parent && parent.frameElement ) { // :1513
parent.attachEvent( "onbeforeunload", function() {
setDocument();
});
}
这种情况发生得很早,可能会阻止您的脚本加载。
将jQuery更新到1.11.0版本(或更多版本), 您将看到它的工作原理 。
当我在Windows XP中测试时,ie8和旧版本的firefox表现出相同的行为(当#clickeEl
首次点击时它突然出现)。 删除<nav>
元素并只使用<ul>
元素似乎解决了这个问题。 然后我意识到问题是标签<nav>
,ie8和firefox都不知道。 如本文所述,浏览器不知道<nav>
是块元素。 所以加入
nav { display:block }
在windows xp的ie8中解决了我的问题。
实际上,不确定这是多么兼容,但似乎插件正在做一些不必要的东西,因为它使用的是jQuery。 所以我在下面加了一点。 (大多数情况下,我不得不在CSS中使用ID而不是插件本身设置display:none
。
在这里,我们显然不知道问题可能在哪里。
console.log($.fn.fadingSlideToggle)
console.log(obj instanceof jQuery)
或(!!obj.jquery && typeof obj.jquery === "string")
一个jquery对象usualy有一个名为jquery
的属性,其中包含当前的jQuery版本。 jquery对象通常也是jQuery Object本身的一个实例。 但请记住,使用.noconflict()
可能没有全局变量jQuery
或$
问题是小提琴中的jQuery加载。 只需从CDN加载jQuery,然后启动您的插件。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
// your plugin
</script>
现在它在IE 8+中运行良好。
你有没有机会有一个id为fadingSlideToggle
的html元素? 这可能是这里解释的问题: https : //stackoverflow.com/a/14003088/561957
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.