Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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 缩短代码(将3个函数缩减为1个)会使其停止工作。我做错了什么?_Javascript - Fatal编程技术网

Javascript 缩短代码(将3个函数缩减为1个)会使其停止工作。我做错了什么?

Javascript 缩短代码(将3个函数缩减为1个)会使其停止工作。我做错了什么?,javascript,Javascript,因此,要快速总结我的问题: 对于类中的一个assignment,我必须获取json数据并将其放在一个表中的屏幕上。这工作很好,我不会包括代码的这一部分,因为我100%肯定这不是问题所在 困难的部分是通过点击页面顶部的三个链接按性别排序。我使用了三个匿名onclick函数,但我的老师告诉我,我需要尝试,不要重复多行代码。所以他给我展示了一种将它放在一个函数中的方法。这是在课程结束时,所以我不能直接在我自己的文件中完成。我在家里试过,但它似乎不起作用,我就是不明白为什么,因为我的三个单独的oncli

因此,要快速总结我的问题:

对于类中的一个assignment,我必须获取json数据并将其放在一个表中的屏幕上。这工作很好,我不会包括代码的这一部分,因为我100%肯定这不是问题所在

困难的部分是通过点击页面顶部的三个链接按性别排序。我使用了三个匿名onclick函数,但我的老师告诉我,我需要尝试,不要重复多行代码。所以他给我展示了一种将它放在一个函数中的方法。这是在课程结束时,所以我不能直接在我自己的文件中完成。我在家里试过,但它似乎不起作用,我就是不明白为什么,因为我的三个单独的onclick仍然起作用

这是三个独立的onclick函数。正如您在单击“男性”链接时所看到的。它隐藏了所有的女性行。如果你点击雌性,它会隐藏所有雄性,如果你点击所有,它会显示所有人

males.onclick = function() { 
         const rowsF = document.querySelectorAll("#female");
        const rowsM = document.querySelectorAll('#male');
        for (const row of rowsF) {
            row.hidden = true;
        }
        for (const row of rowsM) {
            row.hidden = false;
        }
}
females.onclick = function() { 
         const rowsF = document.querySelectorAll("#female");
        const rowsM = document.querySelectorAll('#male');
        for (const row of rowsF) {
            row.hidden = false;
        }
        for (const row of rowsM) {
            row.hidden = true;
        }
}
all.onclick = function() { 
         const rowsF = document.querySelectorAll("#female");
        const rowsM = document.querySelectorAll('#male');
        for (const row of rowsF) {
            row.hidden = false;
        }
        for (const row of rowsM) {
            row.hidden = false;
        }
}
现在这是我调整后的代码,看起来更干净,更短。但这里肯定有错误,因为这似乎不起作用,我就是不明白为什么不起作用。有什么帮助吗

males.onclick = gender("m");
females.onclick = gender("f");
all.onclick = gender("a");

function gender(stringGender) {
    const females = document.querySelectorAll('#female');
    const males = document.querySelectorAll("#male");
    if (stringGender === 'm') {
        hideList(females, true);
    }
    if (stringGender === "f") {
        hideList(males, true);
    }
    if (sGeslacht === "a") {
        hideList(females, false);
        hideList(males, false);
    }
};

function hideList(genderRow, isHidden) {
    for (const row of genderRow) {
        row.hidden = isHidden; 
    }
};         
我是javascript的初学者。在过去的三个月里,我一直在学习一门课程,这是我们在学习一门新语言之前的最后一项任务。因此,如果您在我的代码中看到其他我可以做得更好的东西,请随时告诉我:)


亲切问候男性。onclick=性别(“m”)调用
gender(“m”)
并将其返回值分配给
onclick
。您想将函数分配给
onclick
males.onclick=()=>gender(“m”)
males.onclick=()=>性别(“m”);这是一条lambda线对吧?这是一条。有人叫他们lambdas,是的。它奏效了:)非常感谢。我确实有一个跟进问题tho。我想这是一条lambda线。无论如何,你可以告诉我它是如何用常规代码编写的。因为我对兰博达斯还不是很熟悉,所以我也想用常规的方法来学习。还是非常感谢你的回答,真的很感激。再次,它被正确地称为arrow函数(不仅仅是因为“lambda”的大多数定义都强调它们是匿名的,但并非所有的arrow函数都是匿名的)。上面链接的页面是一个非常简短的阅读。但是您也可以使用传统的函数表达式:
males.onclick=function(){gender(“m”);}。(这不完全一样,因为它不返回
gender
的返回值,而
()=>gender(“m”)
返回值,但是
gender
没有返回值,所以它不重要。精确的模拟应该是
()=>{gender(“m”)}
函数({gender(“m”)}