使用命名空间时jQuery bind()的行为

时间:2013-07-03 08:10:21

标签: javascript events namespaces

目前我正在处理javascript中的命名空间。作为第一步,我构建了一个测试页面。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Namespace</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
var NSVB = NSVB || {};
NSVB.sub = {
  init: function(){
    alert("NSVB rocks");
    $("#click-test").bind("click",NSVB.sub.clicktest());
  },
  clicktest: function(){
    alert("clicked");
  }
}

NSVB.sub.init = function(){
  alert("NSVB rocks overwirtten");
  $("#click-test").bind("click",NSVB.sub.clicktest());
}

$(document).bind("load", NSVB.sub.init());
</script>
</head>
<body>
    <p id="click-test">click to test</p>
</body>
</html>

我希望我的代码能做的是:

  • 使用函数init()和clicktest()
  • 定义命名空间
  • 覆盖函数init()
  • 单击#click-test时点击事件

我的守则的作用:

  • 使用函数init()和clicktest()
  • 定义命名空间
  • 覆盖函数init()
  • 致电clicktest()
  • 当我点击没有任何反应!!

我真的不明白!希望有人可以提供帮助。

提前致谢。

修改

经过一些测试后,我已经完成了以下工作:

删除括号

$("#click-test").bind("click",NSVB.sub.clicktest);

替换

$(document).bind("load", NSVB.sub.init);

使用(其中一个,您更喜欢使用的)

document.addEventListener("DOMContentLoaded",NSVB.sub.init,false);

$(document).ready(function(e) {
NSVB.sub.init();
});

一切正常并且符合预期!

1 个答案:

答案 0 :(得分:1)

你没有绑定函数,而是函数的结果,没什么。

更改

$(document).bind("load", NSVB.sub.init());

$(document).bind("load", NSVB.sub.init);

你在其他地方遇到同样的问题(当然,如果NSVB.puzzle.clicktest()返回一个函数除外):

    $("#click-test").bind("click",NSVB.puzzle.clicktest());