使用jquery的javascript中的可访问性和代码组织问题

时间:2009-08-05 06:32:08

标签: javascript jquery accessibility coding-style organization

我的程序中的代码顺序遇到了麻烦。现在我在document.ready(function() { } );中有一些东西,有些东西在它外面。每当我移动任何东西(组织或改进我的代码)时,我最终会破坏某些东西,我猜是因为声明或访问级别的顺序(即document.ready(function {});之外的东西无法访问其中的某些东西。< / p>

任何人都对javascript明智的位置有任何见解吗?

是否所有内容都在document.ready(function() {});之内?
是否有任何理由在[{1}}之外有任何内容?是外部代码无法访问document.ready(function() {});内的代码吗?

2 个答案:

答案 0 :(得分:3)

  

1。如果一切都在内   document.ready(function(){});?

不,我认为document.ready函数必须只是初始化事物,分配事件处理程序等等。

  

2。有没有理由   以外的任何事情   document.ready(function(){});?

代码重用,以及更好的代码组织。

  

3。代码是否在内   document.ready(function(){});   外部代码无法访问?

是的,在document.ready上创建的变量和对象无法从外部范围访问。

答案 1 :(得分:0)

是否所有内容都在document.ready(function(){});?

是和否。在大型JavaScript应用程序中,我将主控制器从此事件处理程序初始化为全局范围。但是,有些代码不需要等待DOM准备好,特别是:不依赖于DOM的代码。我认为这很直接。例如,我在此事件处理程序之外声明配置对象类,函数等。

有没有理由在document.ready(function(){})之外有任何东西;?

当然,因为上面提到的原因。主要是,不需要DOM交互的代码不应该等待DOM加载,特别是如果它可以异步执行到DOM加载(例如:函数定义,配置对象等)。

此外,不在一个事件处理程序中包含所有代码可以使事情更有条理,允许您模块化代码,使用适当的设计模式等。

是document.ready(function(){})中的代码;外部代码无法访问?

再次,是的,不是。如果你用var声明它是本地的那么它是肯定的,外部作用域是不可访问的,因为它是事件处理程序的本地;否则,它在全局范围内,并且可以从外部范围访问。这是一个例子(托管在这里:http://jsbin.com/uriqe

<强>的JavaScript

var foo = function() {
  alert(global);
  return false;
}

$(document).ready(function() {
  global = "you can see me!?";
  alert("global is initiated");
});

<强> HTML

<body>
  <p><a href="#" onclick="foo()">click me</a></p>
</body>

onclick而不是不引人注目的方法$(document).ready()中的事件附件是故意使用的,以避免任何关于foo通过closure属性访问global的问题/论点。

编辑:我认为我在上一句中已明确说明了,但 onclick是故意使用的,以避免全局范围与闭包属性混淆,但我并不主张使用onlick 当然这是一种不好的做法,你不应该使用它。