Sam*_*lly 25 javascript jquery
我有以下代码:
<script type="text/javascript">
$(function () {
$('#js-news').ticker({
speed: 0.10,
htmlFeed: false,
fadeInSpeed: 600,
titleText: 'DASHBOARD ALERTS',
direction: 'ltr',
displayType: 'reveal',
controls: false
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
我想改变它,只有当#js-news存在时它才会触发.在较旧的IE V10浏览器中,我收到错误:"DOM中不存在元素",相关页面没有js-news元素.较新的浏览器似乎应对,但不是IE7,8,9.
关于代码更改的思考表示赞赏.
谢谢.
coo*_*ter 10
首先,正如@Archer在上面的评论中指出的那样,这个插件编码不正确.当在没有元素的jQuery对象上调用其方法时,惯用的jQuery插件将无声地失败.
这里从代码中看到,这个插件无论是运行console.log()或alert()如果console当没有元素不存在:
if ($(this).length == 0) {
if (window.console && window.console.log) {
window.console.log('Element does not exist in DOM!');
} else {
alert('Element does not exist in DOM!');
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这很糟糕.该插件确实有一个debugMode可以禁用,但它没有帮助,因为这里没有使用该标志.要修改源,您可以更改上面的第一行:
if (opts.debugMode && $(this).length == 0) {
Run Code Online (Sandbox Code Playgroud)
然后一定要debugMode:false在您的设置中进行设置.
-
但是这最终如何影响IE的是它console在开启工具关闭时没有定义对象(并且从未在IE6/7中定义),因此一个简单的解决方案是确保使用NO-OP函数定义对象.
if (!window.console) {
window.console = {
log: function() {}
};
}
Run Code Online (Sandbox Code Playgroud)
现在它将console在IE中找到并调用空函数而不是触发alert().
console对象上还有其他方法可能也应该被填充,但这log()是最常见的方法.
如果您如此倾向,向开发人员提交错误报告可能不是一个坏主意.似乎该项目在过去的两年里没有更新,所以我不知道它是否会有所帮助,但它不会受到伤害.
添加条件以检查长度:
if($('#js-news').length){
$('#js-news').ticker({
speed: 0.10,
htmlFeed: false,
fadeInSpeed: 600,
titleText: 'DASHBOARD ALERTS',
direction: 'ltr',
displayType: 'reveal',
controls: false
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |