javascript - 简单的函数在 Javascript 中不起作用
问题描述
我一直在搞乱这个功能,当我像这样设置它时让它工作:
$(document).ready(function () {
var num1 = document.getElementsByClassName("top")[0];
num1.onmouseover = (function(){
var changeIt = document.getElementsByClassName("topb")[0];
if (changeIt.style.visibility === "hidden") {
changeIt.style.visibility = "visible";
}else {
changeIt.style.visibility = "hidden";
我的问题是我目前正在尝试使其成为一个可重用的函数,用于多个变量。当我尝试这样设置时:
$(document).ready(function () {
var num1 = document.getElementsByClassName("top")[0];
var num1b = document.getElementsByClassName("topb")[0];
function myFunc(x){
if(x.style.visibility === "hidden") {
x.style.visibility = "visible";
}else {
x.style.visibility = "hidden";
}};
num1.onmouseover= myFunc(num1b);
它行不通。我确定这是一些语法或范围问题?不太确定我一直在研究它并且可以确定它)。有没有人有建议?非常感谢你。PS 我的 CSS 和 HTML 很好,因为我已经让它们使用之前的功能设置。
解决方案
问题是您将函数的结果分配给mouseover 事件,而不是函数本身。由于它不返回任何内容,因此它被分配undefined
并因此无效。
由于您的函数在可以访问num1b
变量的范围内,因此您不需要将其作为参数传递。
试试这个:
function myFunc(){
if(num1b.style.visibility === "hidden") {
num1b.style.visibility = "visible";
}else {
num1b.style.visibility = "hidden";
}
};
num1.onmouseover = myFunc;//assign the FUNCTION not the result by not including parenthesis
或者,要使用 jQuery 来减少代码,你可以简单地这样做:
$(".top").mouseover(function () {
$(".topb").toggle();
});
每次鼠标在元素上移动一个像素时,mouseover 都会触发它,因此这可能会导致快速闪烁,您可能希望使用mouseenter
和mouseleave
更好地控制此行为。
推荐阅读
- robotframework - 关键字:Selenium2Library.Wait until Element Is Visible' 预期 1 到 3 个参数,得到 4
- javascript - 谁能告诉我为什么变量“item”的值是未定义的?
- vbscript - 我有一个 HTAFile 用作安装应用程序的菜单。一切正常,直到我使用 VBS Edit 从 HTAFile 创建一个 exe
- c# - 比较两个列表并找出不匹配的地方
- python-3.x - python httplib2中的Google Drive API请求超时
- linux - Sed 对基于行索引的匹配模式进行操作并进行操作
- mysql - MYSQL 按空值排序和分组
- reactjs - 无法将 CSS 应用于
- airflow - Datadog 气流指标
- terraform - Terraform:资源中的可选字段