在for循环中定位图像,然后添加事件?

时间:2011-02-02 20:26:45

标签: javascript for-loop titanium addeventlistener

我有这种情况,我使用for循环加载图像:

for (var i = 0; i < test.length; i++) {

 var likeImage= Titanium.UI.createImageView({
    image:'like.png',
    width:17,
    height:10,
    left:110,
    top:4
});

}

然后我添加一个事件,如果单击其中一个心脏,它应该改变图像。

likeImage.addEventListener("click", function(e) {

likeImage.image = 'unlike.jpg';

});

但是当我点击没有任何事情发生时,任何人都可以解释这个问题,谢谢你们,

编辑:

 tableView.addEventListener('click', function(e) {
var tappedRow = e.row;


                    alert(tappedRow.username1.text);

                });

但它给了我一个错误,说这不是一个对象!或者身份不明!!感谢

3 个答案:

答案 0 :(得分:2)

编辑 -

查看完所有代码后,

http://paste.bradleygill.com/index.php?paste_id=152785

你不需要在图像上放置一个click事件,将click事件放在tableView上,“event.source”将是接收点击的对象。

如果收到点击的对象是您的“likeImages”之一,则将其更改为不同于您想要做的其他任何内容

答案 1 :(得分:0)

尝试使用'this'而不是likeImage:

likeImage.addEventListener("click", function(e) {

    this.image = 'unlike.jpg';

});

答案 2 :(得分:0)

通过this引用图像对象。触发事件处理程序时,likeImage甚至可能不再定义,或者可以指向另一个对象,而this关键字将始终指向函数/对象中的当前对象。你应该这样做

likeImage.addEventListener("click", function(e) {
    this.image = 'unlike.jpg';
});

在你的代码中,你在for scope(而不是全局的)中声明var likeImage并在每个循环的迭代中重新声明该变量,因此你的变量likeImage只保留对最后一个的引用图像对象已创建 例如,在执行循环之后,变量a将始终等于9:

for(var i=0;i<10;i++)
    var a = i;
alert(a);