好的,我有足够的代码,我可能不应该直接发布代码,但我不确定问题在哪里。
相关页面位于letterlyyours.com/design.php。它应该如何工作是你输入一个单词,按“提交”,然后每个字母的小照片出现在下面 - 你可以向上和向下滚动。此外,如果您点击缩略图,则会打开fancybox以显示完整图像。
问题是在Chrome中,所有滚动箭头都被禁用。同样在IE 6/7(它适用于IE 8)中,fancybox仅适用于列表中的第一个缩略图。这不奇怪吗?
无论如何,我怀疑这个问题可能是由于为了解决另一个问题我不得不做的事情。对于照片列表,我最初使用2D数组,如照片[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();
});
});
答案 0 :(得分:2)
我看了你的代码。您可能正在寻找IE问题的正确轨道,其中fancybox仅应用于一个项目。
将fancybox应用于第一个图像,但之后没有任何事实根据您的脚本告诉我,由于某种原因,total
变量等于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中的carousel插件,但是有可能这不是您的错误?
答案 1 :(得分:0)
我认为这可能是孩子们的问题。它在IE 7上对我不起作用