Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中匿名函数的去匿名化_Javascript_Jquery - Fatal编程技术网

Javascript jQuery中匿名函数的去匿名化

Javascript jQuery中匿名函数的去匿名化,javascript,jquery,Javascript,Jquery,这可能是一个很简单的问题,但它会让我抓伤我的头,所以我把它贴在这里 我有以下形式的jQuery: if (jQuery('.SearchRegions:checked').length == 0) { jQuery('.SearchRegions').each(function(){ //code }); } else { jQuery('.SearchRegions:checked').each(function(){ //the same

这可能是一个很简单的问题,但它会让我抓伤我的头,所以我把它贴在这里

我有以下形式的jQuery:

if (jQuery('.SearchRegions:checked').length == 0) { 

jQuery('.SearchRegions').each(function(){

        //code

    });

} else {

jQuery('.SearchRegions:checked').each(function(){

        //the same code     

    });

}
显然,在每个函数中重复一大块代码似乎很荒谬。但是当我尝试命名和移动函数时,它似乎都崩溃了——可能是因为函数中的作用域和/或jQuery(这个)不再引用同一个对象


有谁能帮我发布一个关于我的代码应该是什么样子的一般想法吗?(或任何其他优化或重新设置以使其工作将不胜感激!)

您完全可以定义一个函数并按名称使用它:

function someHandler(event) {
  // code code code
}

jQuery('.SearchRegions').each(someHandler);

请注意,当您按名称引用函数时,不包含“()”

您可以定义函数并按名称使用它:

function someHandler(event) {
  // code code code
}

jQuery('.SearchRegions').each(someHandler);

请注意,当您按名称引用函数时,不包含“()”

假设闭包确实是问题所在,您可以参数化“匿名”函数以将这些值传递给它。例如:

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);
    });
}

假设闭包确实是问题所在,您可以参数化“匿名”函数以将这些值传递给它。例如:

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);
    });
}

您可以将函数定义为变量,并在每个方法调用中使用它

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 );
}
var yourEachFunction=function(){$(“ul”).append(“
  • ”+$(this.val()+”
  • ”);} if(jQuery('.SearchRegions:checked')。长度==0){ jQuery('.SearchRegions')。每个(yourEachFunction); }否则{ jQuery('.SearchRegions:checked')。每个(yourEachFunction); }

    此操作的示例。

    您可以将函数定义为变量,并在每个方法调用中使用它

    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 );
    }
    
    var yourEachFunction=function(){$(“ul”).append(“
  • ”+$(this.val()+”
  • ”);} if(jQuery('.SearchRegions:checked')。长度==0){ jQuery('.SearchRegions')。每个(yourEachFunction); }否则{ jQuery('.SearchRegions:checked')。每个(yourEachFunction); }

    此操作的示例。

    您可以让公共函数接受
    部分作为参数。我可以用示例代码将其扩展为一个答案,如果您喜欢一个不相关的注释,那么您的代码当前会扫描DOM三次。您可以通过“缓存”jQuery对象来提高其速度:
    var$regions=$(“.SearchRegions”),$checked=$regions.filter(“:checked”);如果(!$checked.length){$regions.each(…);}其他{$checked.each(…);}
    这两条评论都是好的和有用的观点-我有一些“啊哈,现在我看到了”的理解闪现@Ben:“缓存”这样的jQuery对象是否会带来丢失对象不断变化的值的风险?e、 g.如果我创建一个名为$input的变量来缓存'jQuery('#input')。如果($inputfield.val!=0)以后可以使用吗?我不想愉快地将我所有的DOM元素分配给变量,然后发现我破坏了一切。(在给出的代码示例中,您的建议似乎没有任何可能的缺点,当然…)-当DOM更改时,jQuery对象不会得到“更新”,这意味着如果您有一个被删除的节点引用,它仍然会指向孤立节点。类似地,如果为
    $li=$(“li”)
    创建一个变量,然后将新段落添加到DOM中,则原始
    $li
    将不会拾取它们()。但是,总的来说,它们是完全安全的。:-)您可以让公共函数接受
    部分作为参数。我可以用示例代码将其扩展为一个答案,如果您喜欢一个不相关的注释,那么您的代码当前会扫描DOM三次。您可以通过“缓存”jQuery对象来提高其速度:
    var$regions=$(“.SearchRegions”),$checked=$regions.filter(“:checked”);如果(!$checked.length){$regions.each(…);}其他{$checked.each(…);}
    这两条评论都是好的和有用的观点-我有一些“啊哈,现在我看到了”的理解闪现@Ben:“缓存”这样的jQuery对象是否会带来丢失对象不断变化的值的风险?e、 g.如果我创建一个名为$input的变量来缓存'jQuery('#input')。如果($inputfield.val!=0)以后可以使用吗?我不想愉快地将我所有的DOM元素分配给变量,然后发现我破坏了一切。(在给出的代码示例中,您的建议似乎没有任何可能的缺点,当然…)-当DOM更改时,jQuery对象不会得到“更新”,这意味着如果您有一个被删除的节点引用,它仍然会指向孤立节点。类似地,如果为
    $li=$(“li”)
    创建一个变量,然后将新段落添加到DOM中,则原始
    $li
    将不会拾取它们()。但是,总的来说,它们是完全安全的。:-)嗯,你当然完全正确。我想知道我最初的困难是从哪里来的?可能是一些至少和在函数调用末尾添加()一样愚蠢的事情。。。非常感谢。嗯,你当然完全正确。我想知道我最初的困难是从哪里来的?可能是一些至少和在函数调用末尾添加()一样愚蠢的事情。。。非常感谢。谢谢另一个很好的建议,对jQuery的工作方式有启发,或者可以使其工作。谢谢!另一个很好的建议,对jQuery如何工作或如何使其工作有启发。