2009-11-16 56 views
2

这应该是非常简单的:的Javascript:用鼠标悬停启用/禁用按钮/鼠标移开

<input type="button" name="test" id="test" value="roll over me" onmouseover="this.disabled=true;" onmouseout="this.disabled=false;">

如果我把鼠标光标移到这个按钮,它就会disabled..yay! 但现在当我将光标移出时,它不会被启用...... boo。

我理解禁用它的概念意味着你不能对它做任何事情。但是,如何通过鼠标启用它?可能吗?我错过了什么吗?

回答

5

您应该将mouseout设置为disabled = ''

<input type="button" name="test" id="test" value="roll over me" onmouseover="this.disabled=true;" onmouseout="this.disabled='';"> 

禁用的属性只会查看它是否存在。你可以设置disabled ='anything',它将被禁用。过去,您只需要在属性中使用关键字disabled,但对于有效的XHTML,您需要将每个属性设置为等于某个值。

编辑: 我这个有点发挥各地,并添加一些填充到SPAN标签,它可让活动正常工作。如果没有填充,则不会捕获事件,因为输入按钮被禁用。我只是将背景变成红色,因此很容易看到SPAN用完的区域。

<span style="padding: 8px; background: red;" onmouseout="this.firstChild.disabled='';"><input type="button" name="test" id="test" value="roll over me" onmouseover="this.disabled=true;"></span> 
+0

@Shawn:感谢您的,但不幸的是,这并不工作,要么:( – Loony2nz 2009-11-16 19:26:08

+0

正如其他人所说,该事件将不会触发,一旦它被禁用。你可以用span标签包装它,但由于事件的起泡方式,这有点时髦。你是否使用任何像MooTools或jQuery的JavaScript框架? – 2009-11-16 20:52:20

+0

@Shawn:不幸的是,没有。是的,如果我有一个框架,它会更好,更干净和不显眼,这就是为什么我发布了这种老式的方式(又名a旧skool)。我会试一试你的代码。 感谢您的输入! – Loony2nz 2009-11-17 01:27:21

0

你可以有一个围绕它的外部元素,并且有一个允许内部元素的外部元素的onmouseover。

+0

哦,我从按钮中删除了onmouseout属性。 – Loony2nz 2009-11-16 19:31:24

+0

'''' '' 仍然只适用于IE。 – Loony2nz 2009-11-16 19:32:01

1

禁用的表单元素不会触发规范中的鼠标事件。

我使用的解决方法是模拟禁用的行为与'禁用'类和事件句柄关联。适用于按钮,但我想它不适用于文本输入和复选框。

2

救援部门!

太糟糕了没有人真的回答了这个问题。有可能做*。

<div style="display: inline-block; position: relative"> 
<input type="button" id="button" disabled="disabled"> 
<div id="buttonMouseCatcher" style="position:absolute; z-index: 1; 
    top: 0px; bottom: 0px; left: 0px; right: 0px;"> 
</div> 

然后:

  • 将鼠标悬停在处理该buttonMouseCatcher:
    • 改变它的Z-指数为-1和
    • 启用按钮。
  • 将鼠标出处理程序上按钮:
    • 改变buttonMouseCatcher的z索引回到1和
    • 禁用该按钮。
相关问题