2010-04-30 168 views
2

這裏是我一起工作的代碼:如何訪問變量的函數以外的Javascript

$(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(); 
}); 

我試圖訪問這個變量: GroupClassName

這個變量是這個函數

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

當我運行該程序時,它說GroupClassName是未定義的。我在這裏錯過了什麼嗎?

+0

嘗試fnIsTheClickedBoxaGroup函數中的'alert(GroupClassName)'。我沒有看到爲什麼GroupClassName不應該設置,當你到達它。另外,你是否無意中多次聲明var GroupClassName?你使用不正確的大寫? – 2010-04-30 19:24:25

+0

行..當我把它取消它的作品。但我不明白爲什麼它的工作 – Luke101 2010-05-01 02:33:20

+0

你也可以嘗試看看它是否適用於其他瀏覽器。因爲你沒有用分號結束你的函數賦值語句('var x = function(){...}'),所以你的代碼在技術上會有語法錯誤,並且可能不適用於所有的瀏覽器。一般來說,看看JSLint(http://www.jslint.com/)對你的代碼的評論。 – 2010-05-01 03:38:01

回答

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(); 
}); 
+0

很抱歉,但可能有效,但它看起來像一團糟,我不認爲我們也確定了問題。 – 2010-05-02 18:04:31

2

或者,由於該變量是'常量',只需在TemplateEditor範圍之外創建它,並在ready事件中進行創建即可。

-1

如果將其更改爲this.GroupClassName,它會起作用嗎?

+0

感謝您的建設性批評。它幫助我沒有盡頭。 – 2010-04-30 19:17:09

3

試試這個

function fnIsTheClickedBoxaGroup(Obj) { 
    var GetClass = Obj.attr('class'); 
    return (GetClass == GroupClassName); 
} 
+0

這應該與他所得到的錯誤無關(請參閱@ interjay的答案),但在任何情況下都是一個很好的改變。更好的可能是(GetClass === GroupClassName)(根據JLint)。 – 2010-04-30 19:40:20

+0

好吧,他不會在變量 - 函數賦值之後放置冒號,我認爲重構代碼將會清除這個問題,因爲這是我能看到的唯一語法問題。 – 2010-04-30 22:54:40

+0

試過這個 - 看起來像你不需要一個分號後的函數聲明。 – 2010-05-02 18:04:02

3

你正確發佈作品的代碼。試試吧here並參見。

我的測試做出的唯一改變是調用fnIsTheClickedBoxaGroup後:

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

你得到的錯誤,由於你沒有在這裏顯示的東西。也許你在其他地方使用GroupClassName

相關問題