Phonegap / Ripple模拟器。 Jquery选择器不在object方法中工作

时间:2013-02-10 15:35:56

标签: jquery cordova ripple

也许我会发疯但这看起来像是一个基本的东西,我现在有一个基本的phonegap应用程序编译到黑莓但我希望能够在ripple模拟器中测试它,我的代码为清楚起见,此处进行了更改,但请查看以下内容......

index.html中的

我有以下初始化代码。

    function onLoad() {
                if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
                document.addEventListener("deviceready", onDeviceReady, false);
                } else {
                    onDeviceReady();
                }
            }

            function onDeviceReady() {
                // Now safe to use the Cordova API
                var program = new app2();
                program.Login();
            }
    }

并在index.js中添加以下简单对象。

var app2 = function(){
    this.Login = function() {
        alert($("#project_list").html());
        this.LoadContent();
    }

    this.LoadContent = function() {
        alert($("#project_list").html());
    }
}

现在只有一个字符串在project_list元素中说“test”,所以预期的输出应该是:

“测试”

“测试”

除了纹波仿真器外,它无处不在。纹波输出如下

“测试”

“未定义”

当我在对象中调用一个方法时,它似乎完全失去了DOM,我正在摸不着头脑。任何人都可以建议为什么会出现这种情况?

1 个答案:

答案 0 :(得分:1)

将您的代码更改为

var app2 = function(){
    var that=this;
    this.Login = function() {
        alert($("#project_list").html());
        that.LoadContent();
    }

    this.LoadContent = function() {
        alert($("#project_list").html());
    }
}

只要您在javascript写作,this的含义就是this的所有者。 在您的情况下,当您在this.LoadContent()函数中撰写this.Login()时,thisthis.Login()的所有者是Login的{​​{1}}属性: app2。它不是app2.Login

为了解决这个问题,我们会app2通过thisapp2 var that变量存储在var that = this中。因此变量that将始终指向app2。该所有者是app2

thatapp2的成员变量。因此that的所有其他成员变量都可以访问app2,包括Login