jQuery 无法在 IE 7 和 Chrome 中工作

标签 jquery internet-explorer google-chrome fancybox jcarousel

好吧,我有足够的代码,我可能不应该直接发布代码,但我不确定问题出在哪里。

相关页面位于 letterlyyours.com/design.php。它的工作原理是,你输入一个单词,按“提交”,然后每个字母的小照片就会出现在下面——你可以上下滚动。此外,如果您单击缩略图,fancybox 将打开以显示完整图像。

问题是在 Chrome 中,所有滚动箭头都被禁用。同样在 IE 6/7 中(它适用于 IE 8),fancybox 仅适用于列表中的第一个缩略图。这不是很奇怪吗?

无论如何,我怀疑这个问题可能是由我为了解决另一个问题而不得不做的一些黑客行为引起的。对于照片列表,我最初使用的是 2D 数组,例如 photos[4][6],但这仅适用于 Firefox,因此我将其更改为 eval('photos'+number+'[index]) 之类的内容,其中除了上述问题之外,似乎可以在 IE 中正常工作。

包含所有 JavaScript 代码的文件的链接是:http://letterlyyours.com/jcarousel/design.js.php

代码如下:

photos0 = [
{url: "photos/thumb_A 1.jpg", title: "A 1"},
{url: "photos/thumb_A 2.jpg", title: "A 2"},
...
];
...
...
photos25 = [
{url: "photos/thumb_Z 1.jpg", title: "Z 1"},
...
];

jQuery(document).ready(function() {

jQuery('#create').submit(function(event) {
    var word = jQuery('#word').val();
    event.preventDefault();
    jQuery('ul').unbind();
    jQuery("#creation").html('');
    jQuery('#creation').css('width', Math.max(122, 75*word.length));
    for (var a = 0; a < word.length; a++)
        {
        jQuery('#creation').append('<ul class="jcarousel jcarousel-skin-tango" id="carousel' + a + '"></ul>');
        var total = eval('photos' + parseInt(word.toUpperCase().charCodeAt(a)-65) + '.length');
        for (var b = 0; b < total; b++)
            {
            var url = eval('photos' + parseInt(word.toUpperCase().charCodeAt(a)-65) + '[b].url');
            var url_full = url.replace('thumb_', '');
            jQuery('#carousel' + a).append('<li><a id="thumb' + b + '" href="' + url_full + '"><div style="width: 75px; height: 113px; background-image: url(\'' + url + '\');"></div></a></li>');
            jQuery('a#thumb' + b).fancybox({
                'transitionIn': 'elastic',
                'transitionOut': 'elastic',
                'hideOnContentClick': true
            });
            }       
        jQuery('#carousel' + a).jcarousel({
            vertical: true,
            scroll: 1,
            itemVisibleInCallback: function(carousel, li, index, state) {
                jQuery(li).parent().data('image', jQuery(li).children('a').children('div').css('background-image').replace(/"/g, ''));
            }
        });
        }
    jQuery('#creation').append('<a id="order" href="#orderform"><img width="122" height="24" src="images/button_order.png" tabindex="3" alt="Order Yours" /></a>');
    jQuery('a#order').fancybox({
    'hideOnContentClick': false,
    'transitionIn': 'fade',
    'frameWidth': 'auto',
    'title': 'Order \'' + word + '\'',
    'overlayShow': true,
    'overlayOpacity': 0.8,
    'overlayColor': 'black',
    'onStart': function() {
        jQuery('#list').html('');
        jQuery('#cost').html(word.length + ' photos at $6.00 per photo <br />Total: $' + word.length*6);
        jQuery('form#contact-form').unbind();
        jQuery('form#contact-form').submit(function(event) {
            jQuery.fancybox.showActivity();
            jQuery.post('contact.php', jQuery('form#contact-form').serialize(), function()
                {
                jQuery.fancybox(jQuery('div#thanks'));
                });
            event.preventDefault();
        });
        var photolist = '';
        for (a = 0; a < word.length; a++)
            {
            jQuery('#list').append('<div style="float: left; width: 75px; height: 113px; background-image: ' + jQuery('#carousel' + a).data('image') + '"/>');
            photolist += jQuery('#carousel' + a).data('image');
            }
        jQuery('#photonames').val(photolist);
        }
    });
});

jQuery('#word').keypress(function(event) {
    var letter = event.which;
    if ((letter != 8) && (letter != 0))
        {
        if (letter < 97)
            letter += 32;
        if (!((letter >= 97) && (letter <= 122)))
            {
            event.preventDefault();
            }
        }
});

jQuery('#word').select(function(event) {
    event.preventDefault();
});
});

最佳答案

我看了你的代码。对于 IE 问题,您可能处于正确的轨道上,其中 fancybox 仅应用于一项。

事实上,fancybox 应用于第一张图像,但之后没有任何图像,根据您的脚本告诉我 total由于某种原因,IE7 的变量等于 1

var total = eval('photos' + parseInt(word.toUpperCase().charCodeAt(a)-65) + '.length');

这是我的假设,因为这样你就有一个 for 循环,将 fancybox 附加到 jQuery('a#thumb' + b) 。这只能触发一次,这意味着 b < total仅在一次迭代中成立(当 b=0 时的第一次迭代)。

要在 IE 中进行测试,您可能想要尝试的是执行原始警报以查看总数是多少。所以:

var total = eval('photos' + parseInt(word.toUpperCase().charCodeAt(a)-65) + '.length');
alert('total = ' + total);

这至少会消除这种可能性。

另外 - 我不熟悉 fancybox,但我想知道您是否可以将 CSS 类应用于图像,这样就不必迭代并生成 'a#thumb' + b并单独选择每个,您可以只应用一个选择器,例如:

jQuery('a.thumbnail').fancybox({ .... });

无论如何,只是一些帮助您入门的想法......

对于 Chrome 问题和轮播,您是否在 Chrome 中测试了轮播插件,万一这不是您的错误?

关于jQuery 无法在 IE 7 和 Chrome 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095353/

相关文章:

jquery - 无法在 Internet Explorer 中将样式表添加到 iframe

internet-explorer - Windows Phone 8 模拟器互联网连接

javascript - Cookie 未出现在 Chrome 控制台的“资源”选项卡中

javascript - 为什么 Array.prototype 只在控制台输出 [] ?

javascript - 鼠标悬停事件上的多个元素而不是单个元素

jquery - 内联网开发人员制作面向公众的网站的安全考虑因素?

javascript - 使用 JavaScript 预加载的淡入淡出图像

javascript - 在没有 JQuery 的 IE 中使用 Javascript 检索 "Placeholder"值

javascript - 浏览器可以检测浏览器何时在前台或后台模式下运行吗?

javascript - 从 4 个按钮使用 jQuery 交换图像 onClick