javascript - 需要帮助让我的 Javascript 不引人注目

标签 javascript unobtrusive-javascript onmouseover onmouseout unobtrusive

所以我用 HTML + Javascript 创建了一个订单,我想使用 Javascript 的是当有人将鼠标悬停在汤的“标签”上时,一个隐藏的 div 将可见(稍后我打算获得将显示有关其标签悬停的汤的信息的代码)。我已经设法让它工作,但我知道我实现的 Javascript 代码很突兀,我想将相同的代码(或等效代码)放到我的外部 Javascript 文件中以使其不突兀。

这是我表单中的一段代码(带有“突兀的”Javascript):

<form method="post" action="#" name="souporderform" id="souporderform" onsubmit="return validate()">
**<div id="soupinfo"></div>** <!-- hidden div -->

<table>

<tr><th>Item</th><th>Price</th><th>Quantity</th><th id="subtotal_header">Subtotal</th>
<tr>
<td><label for="chicken_quantity" onmouseover="document.getElementById('soupinfo').style.visibility = 'visible';" onmouseout="document.getElementById('soupinfo').style.visibility = 'hidden';">Chicken Soup</label></td>
<td>$3.50<input type="hidden" id="chicken_price" value="3.50"></td>
<td class = "center"><select id="chicken_quantity" name="chicken_quantity" size="1">
<option value="10">10</option>
<option value="9">9</option>
<option value="8">8</option>
<option value="7">7</option>
<option value="6">6</option>
<option value="5">5</option>
<option value="4">4</option>
<option value="3">3</option>
<option value="2">2</option>
<option value="1">1</option>
<option value="0" selected>0</option>
</select>
</td>
<td id="chicken_subtotal"></td>

我敢肯定,对于有经验的 Javascript 编码人员来说,看着这个 Javascript 是显而易见的......

这是与“隐藏”div 有关的 CSS 代码片段:

#soupinfo{
position:absolute;
background-color:#ff0000;
color:#000000;
width:100px;
height:20px;
margin-top:-20px;
margin-left:0px;
border:1px solid black;
visibility:hidden;
}

我确实有一个外部 Javascript 文件,这就是我试图以不引人注目的方式复制我想要的内容的方法:

var soupInfoDiv = document.getElementById("soupinfo");
var formLabel = document.getElementsByTagName("label");

for(var i = 0; i < formLabel.length; i++){
formLabel[i].onmouseover = soupInfoDiv.style.visibility = 'visible';
formLabel[i].onmouseout = soupInfoDiv.style.visibility = 'hidden';
}

这段代码放在一个名为“setup”的函数中,该函数在页面加载时执行,代码如下:

if (document.getElementById) {
window.onload = setup;
}

所以如果有人能帮助我,我将非常感激:)。如果提供代码片段使整个问题难以破译,我可以将所有代码上传到我的站点并在此处共享。

最佳答案

我看到的主要问题是 mouseover 和 mouseout 处理程序需要是函数。

var soupInfoDiv = document.getElementById("soupinfo");
var formLabel = document.getElementsByTagName("label");

for(var i = 0; i < formLabel.length; i++){
  formLabel[i].onmouseover = function() {
    soupInfoDiv.style.visibility = 'visible';
  }
  formLabel[i].onmouseout = function() {
    soupInfoDiv.style.visibility = 'hidden';
  }
}

我建议您考虑使用 jQuery,因为所有这些,包括 window.load 都可以简化为:

$(function() {
  $('#souporderform label').hover(
    function() {
      $('#soupinfo').css('visibility', 'visible');
    },
    function() {
      $('#soupinfo').css('visibility', 'hidden');
    }
  );
});

关于javascript - 需要帮助让我的 Javascript 不引人注目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328804/

相关文章:

javascript - Google map api 3 Bounds 无法移动 map

javascript - Javascript的动态加载

javascript - 简单的 onmouseover 调用 javascript 不工作

javascript - 如何创建高性能选择器 [请不要使用 jquery]

javascript变量冲突

javascript - 使用 onMouseover 更改 <div> 的颜色

JavaScript 图像更改

javascript - 打印文件中的数组数组

javascript - 使用 Jquery 检测选择列表的更改

javascript - 根据选择值添加/删除表行