作为一名.NET开发人员,我习惯于自定义控件上的委托和事件。我创建javascript代码已经有一段时间了,但我想知道用javascript实现这一点的最佳方法。以下是我通常对组件进行编码的方式。
var RGComp= RGComp || {};
RGComp.MyComponent = function () {
function events(){
$("a").unbind("click");
$("a").click(function () {
// Do something
});
}
function generateUI(){
//generate HTML UI
events();
}
}
我确信这是不恰当的。我必须一直调用unbind以避免阻塞DOM。非常感谢。
全局事件处理程序
会有人支持和反对任何事情,包括空气分子的运动,尽管归根结底,重要的是你能够做你需要做的事情,并在这个过程中保持组织。在JAB Creations web平台上,我们在适当的情况下使用全局事件,有时我们会在必要时设置特定于元素的事件。
//Do not shorten event to e, you WILL want to reference e separately.
window.onclick = function(event)
{
if (condition) {}
else if (condition) {}
}
设置特定事件:
- 通常,您需要检查
section()
或page()
是否合适(假设您有合适的信息层次结构( - 您需要一个函数来返回当前页面的id,在我的情况下,这是
push_current_id()
或id_(push_current_id())
(例如,控制面板的push_current_id() == 'admin_'
,以及HTML5中id
属性的字符限制解除之前( - 在少数情况下,为特定元素设置静态事件是可以的,但通常您希望具有普遍适用的行为:
CTRL+水平滚动:
window.onwheel = function(event)
{
if (event.ctrlKey)
{
if (e.scrollHeight > e.clientHeight && event.deltaY != 0)
{
event.preventDefault();
//Change 5 to adjust sensitivity.
e.scrollLeft = e.scrollLeft + (5 * event.deltaY);
}
//else if (condition) {}//Other behavioral tweaks.
}
//else if (condition) {}//Other behavioral tweaks.
}
主要的好处是,如果不是所有的话,您将限制对全局处理程序的大多数事件调用,并且您可以在元素挂接到这些全局事件的部分所需的条件上具有特定或广泛的条件。您不需要添加/删除事件,只需调整if
条件即可。我相信有人会强烈反对,尽管我们在整个网络平台上只取得了成功,该平台旨在在没有框架和库的情况下显式工作,以最大限度地提高性能。