在维基页面上,其中一个例子是应该在JS文件中绑定动作到事件,而不是在HTML中。这个例子将功能(“行为层”)与Web页面的结构/内容和呈现分离
<input type="text" name="date" id="date" />
...
window.onload = function() {
document.getElementById('date').onchange = validateDate;
};
被青睐于
<input type="text" name="date" onchange="validateDate()" />
然而,我认为我更喜欢第二个带有
onchange
属性的代码,原因如下:
- 易于阅读,并且立即清楚在该元素上更改(或任何其他事件)会发生什么。
- 我不必查看JavaScript文件并查找是否绑定了
onchange
事件以及是否为#date
定义了其他事件,例如click
。 - 像AngularJS这样的框架具有
ng-click
,并混合HTML结构和JS。为什么我不能呢?
我读过不使用非侵入式javascript的缺点:
- 污染全局名称空间。
- 创建冗长且难以阅读的内联代码。
- 如果事件的代码发生更改,则只需在JS文件中更改一次即可。
但我认为这些缺点可以解决。
- 不要污染命名空间,将应用程序创建在一个变量中,这样代码看起来就像
onchange="app.validateDate()"
,就不会发生污染。 - 内联代码不会被编写,而是在JS文件中分离出一个函数,然后像这样调用它
onclick="app.action();"
。 - 这不是和在
onclick
属性中使用函数一样吗?因为最终你只需要在两种方法中的一个函数中进行更改,无论是$('input').change(function () {/* ... change ... */});
还是app.action = function () {/* ... change ... */}
。
那么这是否仍然被认为是良好的实践呢?