var listBox = {};

listBox.chickChkBox = function(chk){
chk = $(chk);
if(chk.attr("checked")){
chk.parents("tr").find("td").addClass("choose");
chk.parents("td").attr("class","chk_on");
}else{
chk.parents("tr").find("td").removeClass("choose");
chk.parents("td").attr("class","chk_off");
}
}

listBox.choose = function(){
var courseId = $("#courseId").val();
if(courseId==""){
alert("参数缺失.");
return;
}
var chks = $(".courseId:checked");
if(chks.length<1){
alert("请选择要挂接的培训班.");
return;
}
var str = "";
for(var i = 0; i < chks.length; i++){
str += "refCourseId="+$(chks.get(i)).val()+"&";
}
str += "formMap.COURSE_ID="+courseId;
$.ajax({
cache:false,
type:'POST',
dataType:'text',
url:'/course/cmscoursereferrer/addCourseRefAjax.do',
data:str,
success:function(rst){
rst = new Function("return " + rst)();
if(rst.status){
alert("绑定成功.");
window.close();
}else{
alert("绑定失败.");
}
}
});
}
<button type="button" onclick="listBox.choose();">绑定选择的课程</button>

解决方案 »

  1.   

    我之前都是直接这样写:
    function funA(a){
      ......}
      

  2.   

    感觉这个写法好像不太好,有点多余,
      listBox=({
      chickChkBox:function(){
     },
     choose:function(){
     
    }
    })我喜欢看这种方式,不过我对JS也很菜鸟, 只是习惯问题,最近刚在大叔那里买了本,javascript设计模式在看。
      

  3.   

    这就是面向对象的JS编程方式。
    最直观的就是这样实现了命名空间,便于组织
    你直接写的话,funA是全局的,就不能再有一个函数叫funA,而且函数多了也没有组织,比如弹窗的一系列方法 和属性,你可以封装到var Dialog = {};里面参考:
    http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx
    http://www.blogjava.net/lizongbo/archive/2006/06/19/53798.html
      

  4.   

    没啥好处,就加个prefix而已。
      

  5.   

    命名空间,方便组织修改代码,避免函数名冲突楼主 可以阅读下 
    编写高质量代码--Web前端开发修炼之道
      

  6.   

    这样很形象的代表你在 listBox 下有一组关联的操作或者属性
    至少copy和组织代码的时候 会很简单而且以后方便重构成对象化设计
      

  7.   

    3楼的解释比较好。
    用一个对象(你代码中的listBox)来作为命名空间,把彼此有关系或者共同完成某个功能的一些方法(你代码中的chickChkBox,choose函数)或属性都挂靠到这个对象上。
    这样既避免了污染全局变量,又实现了简单的封装,从而代码变得简洁和规范。