【发布时间】:2014-07-11 18:08:09
【问题描述】:
假设我们有一个 javascript 函数,该函数设置为在单击屏幕上的删除按钮时运行...
function deleteThis(obj) {
/*work to delete object*/
window.location="newurl.php";
}
$('.delete').click(function(){
deleteThis($(this));
});
<div class='delete'>Delete</div>
现在假设您想要不同类型的删除按钮。他们都做同样的前几件事,但最后一步是不同的。我一直在做的是这个……
function deleteThis(obj) {
/*standard work to delete object*/
if (obj.attr('type')=='a') {
//extra work for type a
} else if (obj.attr('type')=='b') {
//extra work for type b
}
window.location="newurl.php";
}
$('.delete').click(function(){
deleteThis($(this));
});
<div class='delete' type='a'>Delete</div>
仅适用于几种不同的类型。但它开始有点失控了。我想要的是能够做到这一点......
在我的主 javascript.js 文件中:
function deleteThis(obj) {
/*standard work to delete object*/
/*do any extra functions that have been designated for this type*/
window.location="newurl.php";
}
$('.delete').click(function(){
deleteThis($(this));
});
代码仅包含在有“type a”按钮的页面上
$(document).ready(function(){
/*something that tells the deleteThis() function that it should do something extra when running*/
});
这样我就不必将任何额外的变量传递给 deleteThis(),我不必为不同类型的删除按钮创建不同的 onclick 事件。我可以只有一种类型的删除按钮。然后在我希望删除按钮表现不同的页面上,我所要做的就是多放一点 javascript 代码。
这样的事情可能吗?
更新
请注意,deleteThis() 的末尾是一个窗口重定向。这使得任何额外的点击处理程序都不会被触发,因为我们已经离开了页面。
【问题讨论】:
-
第一个版本(传递一个值来做出决定)称为命令耦合,最好避免。 “经理做决定,工人工作”是确保工人职能不做决定的常用比喻。您可以为额外的工作连接额外的处理程序(如果您的代码适合)。他们将按照注册的顺序开火。
-
jquery 允许函数作为参数传递,example here。您可以使用方法名称作为类型值。
标签: javascript jquery