0

所以我根据用户点击的内容更新 div 的内容。有时我显示图像,有时我显示文本:

var output;
switch(type)
{
    case IMAGE:
        pages = null;
        contentText = null;
        upArrow = null;
        downArrow = null;

        var imageURL = "assets/images/" + items[itemIndex].imageURL;
        output = '<img src="' + imageURL + '" class="fullImage" />';
        break;

    case TEXT:
        pageIndex = 0;
        pages = items[itemIndex].copy.page;
        numPages = pages.length;
        lastPageIndex = numPages - 1;

        output = '<div id="contentText" class="text"></div>';
        output += '<div id="textUpArrow" class="arrow upArrow"></div>';
        output += '<div id="textDownArrow" class="arrow downArrow"></div>';

        contentText = $("#contentText");

        textUpArrow = $("#textUpArrow");
        textUpArrow.bind(MOUSE_DOWN, onUpArrowClicked);

        textDownArrow = $("#textDownArrow");
        textDownArrow.bind(MOUSE_DOWN, onDownArrowClicked);

        setText();
        break;
}
content.html(output);

这个问题似乎与范围有关。我在我的 JS 文件的根级别声明了 contentText、textUpArrow 和 textDownArrow(我不知道它是否被称为 root,但它在每个函数之外,所以它是全局可用的)。

发生的事情是当我在控制台中输出上述变量时,没有任何东西是未定义的。但是,每当我尝试使用这些变量时,无论是用于事件侦听器还是通过 jQuery 更改它们的 CSS,都没有任何反应。

我应该调查什么?谢谢!

4

4 回答 4

1

您在将事件添加到 DOMdiv 之前将其绑定到。那是行不通的。

于 2012-08-07T20:49:42.017 回答
1

我想你会想要使用.on()而不是.bind(). 来自 jQuery .bind()文档:

从 jQuery 1.7 开始,该.on()方法是将事件处理程序附加到文档的首选方法。对于早期版本,该 .bind()方法用于将事件处理程序直接附加到元素。处理程序附加到 jQuery 对象中当前选定的元素,因此这些元素必须存在于调用.bind()发生的点。.on()有关更灵活的事件绑定,请参阅或中有关事件委托的讨论.delegate()

于 2012-08-07T20:49:49.073 回答
0

那是因为您在创建元素之前设置了contentText,textUpArrow和。textDownArrow

output = '<div id="contentText" class="text"></div>';
output += '<div id="textUpArrow" class="arrow upArrow"></div>';
output += '<div id="textDownArrow" class="arrow downArrow"></div>';

contentText = $("#contentText");

这里,contentText设置为元素 id#contentText的元素,但该元素尚未创建,因此它变为未定义

于 2012-08-07T20:52:02.087 回答
0

何时将输出应用于文档?

如果它在 setText() 中,您可能希望在完成输出文本之后并在设置 contentText 之前调用该方法。

当您尝试设置该变量时,文档中没有具有该 ID 的 div。

于 2012-08-07T20:48:15.173 回答