0

我试图通过获取从 add() 方法返回的项目(它使用 get() 方法获得)并向其添加单击事件处理程序,从而使我添加到 jcarousel 对象的项目可点击,如下所示:

for(n = 0; n < response.link_colors.length; n++) {
    item = carousel.add(n + 1, '<div style="background-color: ' + response.link_colors[n] + '; width: 75px; height: 75px;">&nbsp;</div>' );
    makeClickable(item, response.link_colors[n], 'linkcolor');
}

function makeClickable(item, selection, setting) {
    item.attr("sel", selection);

    item.click(function() { 
        eval("selections." + setting + " = $(this).attr('sel');");
        if(setting == 'layout') {
            $('#template_preview').show();
            $('#extracted_selections').show();
        }
        reloadFrame();
    }); 
}

这在 Chrome、Firefox 等中按预期工作。但 IE9 告诉我返回的项目不是对象,因此 attr() 方法无效。

查看 jCarousel 代码,我看到了 get 方法:

    get: function(i) {
        return $('>.jcarousel-item-' + i, this.list);
    },

看起来很简单。我已经确认有一个具有适当类名的 LI 元素(例如 jcarousel-item-1),但即使this.list它引用的对象(由 jcarousel 构造函数创建)根据 IE9 似乎也是无效的。

知道如何解决这个问题吗?

谢谢!

4

1 回答 1

0

经过一些进一步的研究,我意识到我并没有var item;像我想的那样在函数之外声明 item 变量。这在所有版本的 IE 中都修复了它。所以,让这成为你们所有人的一课(但,尤其是我)——声明你的变量,孩子们!喝你的阿华田。

于 2012-11-14T00:22:03.900 回答