2009-11-16 113 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和
    • 禁用該按鈕。