2

Here is the code I am working with:

$(document).ready(function () {

    var TemplateEditor = function () {

        var GroupClassName = 'group';
        var SelectedGroup = 0;

        var BindClicks = function () {
            $('.CriteriaSelections').unbind('click').click(function (event) {
                event.preventDefault();
                if (fnIsTheClickedBoxaGroup($(this))) {
                    TemplateEditor.GroupClicked();
                }
                else {
                    TemplateEditor.CriteriaClicked($(this), SelectedGroup);
                }
            });

            $('.groupselected').unbind('click').click(function (event) {
                event.preventDefault();
                SelectedGroup = $(this).attr('group-'.length);
                TemplateEditor.SelectGroup(SelectedGroup);
            });
        }


        var fnGetGroupID = function (Obj) {
            if (fnIsTheClickedBoxaGroup(Obj) == true) {
                return null;
            }
            else {
                //Get parent which is the group
                var ObjParent = Obj.parent();
                var GID = ObjParent.attr('id').substr('group-'.length);
                return GID;
            }
        }

        var fnIsTheClickedBoxaGroup = function (Obj) {
            var GetClass = Obj.attr('class');
            if (GetClass == GroupClassName) {
                return true;
            }
            else {
                return false;
            }
        }

        return {
            Init: function () {
                BindClicks();
            },
            CriteriaClicked: function (Obj, GroupID) {
                $('<div>').attr({ id: '' }).addClass('selection').text(Obj).appendTo('#group-' + GroupID);
            },
            GroupClicked: function () {

            },
            SelectGroupClicked: function () {

            },
            UpdateTargetPanel: function () {

            }
        };
    } ();
    TemplateEditor.Init();
});

I am trying to access this variable: GroupClassName

This variable is inside this function

var fnIsTheClickedBoxaGroup = function (Obj) {
                var GetClass = Obj.attr('class');
                if (GetClass == GroupClassName) {
                    return true;
                }
                else {
                    return false;
                }
            }

When I run the program it says GroupClassName is undefined. Am I missing something here?

3
  • Try alert(GroupClassName) in the fnIsTheClickedBoxaGroup function. I see no reason why GroupClassName shouldn't be set when you get to it. Also, do you accidentally say var GroupClassName multiple times? Do you use incorrect capitalization? Commented Apr 30, 2010 at 19:24
  • OK..when i take var off it works. but i don't understand why its working Commented May 1, 2010 at 2:33
  • You could also try seeing if it works in other browsers. Because you don't end your function assignment statements (var x = function(){...}) with semicolons, your code technically has syntax errors and might not work in all browsers. In general, take a look at what JSLint (jslint.com) has to say about your code. Commented May 1, 2010 at 3:38

5 Answers 5

3

Try this

function fnIsTheClickedBoxaGroup(Obj) {
  var GetClass = Obj.attr('class');
  return (GetClass == GroupClassName);
}
Sign up to request clarification or add additional context in comments.

3 Comments

This should not be relevant to the error he is getting (see @interjay's answer), but it is a good change in any case. Even better might be (GetClass === GroupClassName) (according to JLint).
Well he's not putting semi colons after the variable - function assignments and I think restructuring the code will clear that up since thats the only syntax problem I can see.
Tried this out - looks like you don't need a semi colon after a function declared like that.
3

The code you posted works correctly. Try it here and see.

The only change I made for the test is after the call to fnIsTheClickedBoxaGroup:

if (fnIsTheClickedBoxaGroup($(this))) {
    alert('fnIsTheClickedBoxaGroup returned true');
    //TemplateEditor.GroupClicked();
}
else {
    alert('fnIsTheClickedBoxaGroup returned false');
    //TemplateEditor.CriteriaClicked($(this), SelectedGroup);
} 

You're getting the error due to something you haven't shown here. Maybe you're using GroupClassName in an additional location?

Comments

2
$(document).ready(function () {

    var TemplateEditor = (function () {

        var __self = this;

        __self.groupClassName = 'group',
        __self.selectedGroup = 0;

        __self.BindClicks = function () {

            $('.CriteriaSelections').unbind('click').click(function (event) {
                event.preventDefault();
                if (__self.fnIsTheClickedBoxaGroup($(this))) {
                    TemplateEditor.GroupClicked();
                }
                else {
                    TemplateEditor.CriteriaClicked($(this), __self.selectedGroup);
                }
            });

            $('.groupselected').unbind('click').click(function (event) {
                event.preventDefault();
                __self.selectedGroup = $(this).attr('group-'.length);
                TemplateEditor.SelectGroup(__self.selectedGroup);
            });
        }


        __self.fnGetGroupID = function (Obj) {
            if (__self.fnIsTheClickedBoxaGroup(Obj) == true) {
                return null;
            }
            else {
                //Get parent which is the group
                var ObjParent = Obj.parent();
                var GID = ObjParent.attr('id').substr('group-'.length);
                return GID;
            }
        }

        __self.fnIsTheClickedBoxaGroup = function (Obj) {
            var GetClass = Obj.attr('class');
            if (GetClass == __self.groupClassName) {
                return true;
            }
            else {
                return false;
            }
        }

        return {
            Init: function () {
                __self.BindClicks();
            },
            CriteriaClicked: function (Obj, GroupID) {
                $('<div>').attr({ id: '' }).addClass('selection').text(Obj);
                // text return text, don't jQuery object
                $('<div>').appendTo('#group-' + GroupID);
            },
            GroupClicked: function () {

            },
            SelectGroupClicked: function () {

            },
            UpdateTargetPanel: function () {

            }
        };

    }).call({});

    TemplateEditor.Init();
});

1 Comment

Im sorry but that may work but it looks like a mess, and I don't think we identified the problem either.
2

Alternatively, since that variable is a 'constant', just create it outside of the TemplateEditor scope and just inside the ready event.

Comments

-1

Does it work if you change it to this.GroupClassName?

1 Comment

Thanks for the constructive criticism. It helps me no end.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.