Javascript变量范围

时间:2011-03-09 19:48:03

标签: javascript scope

我是否可以在内部致电selectCompanyJump(this)而无需从App.site.profile拨打电话?

除了App.site.profile.selectStateJump(this);之外,我可以在不更改{.1}}的情况下执行parent.selectStateJump(this);吗?

this

3 个答案:

答案 0 :(得分:1)

您可以将您想要的“this”范围作为change()函数定义之外的另一个变量引用:

     profile: function () {
            var profile;

            return {
                init: function () {
                    profile = $('div#profile');
                    var self = this;

                    $('select[name="company_id"]', profile).change(function () {
                        self.selectCompanyJump(this);
                    });

                    $('select[name="state_id"]', profile).change(function () {
                        self.selectStateJump(this);
                    });
                },
                selectCompanyJump: function (select) {
                    $(select.parent()).submit();
                },
                selectStateJump: function (select) {
                    $(select.parent()).submit();
                }
            }
        }()

答案 1 :(得分:0)

您可以执行以下操作

$(document).ready(function () {
App.site = function () {
    var me = this;
    me.selectStateJump = function selectStateJump (select) {
                    $(select.parent()).submit();
                }
    return {
           ....
           selectStateJump: selectStateJump
    }

您只需拨打me.selectStateJump()

即可

修改

实际上下面就够了

$(document).ready(function () {
    App.site = function () {
        function selectStateJump (select) {
                $(select.parent()).submit();
        }
return {
       method : function(select) {
           selectStateJump(select);
       }
       selectStateJump: selectStateJump
}

答案 2 :(得分:0)

假设您只是使用函数的select参数来引用触发事件的元素,您只需将指针传递给事件绑定器,然后使用this关键字。

profile: function () {
            var profile;

            return {
                init: function () {
                    profile = $('div#profile');
                    $('name="state_id"', profile).change(this.selectStateJump);

                },
                selectStateJump: function () {
                    $(this).parent().submit();
                }
            }