这可能是一个相当简单的问题,但它让我抓狂,所以我把它贴在这里。
我有一些如下形式的jQuery:
if (jQuery('.SearchRegions:checked').length == 0) {
jQuery('.SearchRegions').each(function(){
//code
});
} else {
jQuery('.SearchRegions:checked').each(function(){
//the same code
});
}显然,在每个函数中重复一大块代码似乎很可笑。但是当我尝试命名和移动函数时,它似乎完全崩溃了--可能是因为范围和/或函数内部的jQuery(这)不再引用同一对象的问题?
有没有人可以通过发布我的代码应该是什么样子的大体概念来帮助我?(或任何其他优化或重铸,以使其工作,将非常感谢!)
发布于 2011-02-24 03:33:19
您绝对可以只定义一个函数并按名称使用它:
function someHandler(event) {
// code code code
}
jQuery('.SearchRegions').each(someHandler);注意,当您通过名称引用函数时,您不会包含"()“(”()“)。
发布于 2011-02-24 03:34:12
假设闭包确实是问题所在,您可以参数化您的“匿名”函数以将这些值传递给它。例如:
function eachRegion(values, $container, foo) {
// common code which uses scope variables `values`, `$container`, and `foo`
}
// elsewhere, in code defining `values`, `$container`, and `foo`...
if (jQuery('.SearchRegions:checked').length == 0) {
jQuery('.SearchRegions').each(function(){
eachRegion(values, $container, foo);
});
} else {
jQuery('.SearchRegions:checked').each(function(){
eachRegion(values, $container, foo);
});
}发布于 2011-02-24 03:36:40
您可以将函数定义为变量,并在每个方法调用中使用该变量。
var yourEachFunction = function(){$("ul").append("<li>" + $(this).val() + "</li>");}
if (jQuery('.SearchRegions:checked').length == 0) {
jQuery('.SearchRegions').each(yourEachFunction );
} else {
jQuery('.SearchRegions:checked').each(yourEachFunction );
}这是在jsfiddle上工作的示例。
https://stackoverflow.com/questions/5095985
复制相似问题