2010-05-26 51 views
0

我需要創建一個表單元素使用Javascript - 文本輸入屬性

<輸入禁用類型= 「文本」 值= 「水木清華」/ >

這是禁用默認爲。它使得發生在發生在發生。

onmouseover =「this.disabled = false;」

而由禁用的onmouseout

的onmouseout = 「this.disabled = TRUE;」


我需要做的是檢查以下內容。 如果<輸入>被關注,那麼它不應該被禁用。

如果表單元素失去焦點,則禁用它。

請幫我完成這些事件。

< input disabled type =「text」value =「水母清華」onmouseover =「this.disabled = false;」的onfocus = 「??? 」的onblur =「 ??? 」的onmouseout =「 如果(???){this.disabled = TRUE;}」/ >

+4

這聽起來像一個非常奇怪的用戶體驗,如果你不介意我的話。首先,這意味着您完全禁用鍵盤訪問該字段。我們的鍵盤類型不會那麼喜歡,可訪問性軟件也可能會遇到這種情況。 – 2010-05-26 13:09:53

+0

你能告訴我們更多關於你爲什麼要這樣的行爲嗎? – 2010-05-26 13:13:46

+0

我同意T.J.對此,我很少在網頁上觸摸我的鼠標。 – CharlesLeaf 2010-05-26 13:14:07

回答

4

這是行不通的,因爲onmouseover在大多數瀏覽器中不會禁用禁用輸入。 (Opera是一個例外,IE通常不會,除非你用拖動操作來欺騙它。)

在任何情況下,它聽起來都像是一個非常奇怪和用戶不友好的詭計。 爲什麼選擇要禁用它嗎?如果它在嘗試與之交互時變爲非禁用狀態,那麼它似乎沒有任何意義(但存在大量的可訪問性缺陷)。

如果它只是一個造型的東西,然後使用樣式:

<style type="text/css"> 
    .weirdinput { color: silver; } 
    .weirdinput:hover, .weirdinput:focus { color: black; } 
</style> 

<input class="weirdinput" value="smth" /> 

然而,IE < 8不支持:focus,和IE < 7不支持非鏈接:hover,因此,如果您需要它的工作,你將不得不添加一些腳本,例如。例如:

<style type="text/css"> 
    .weirdinput { color: silver; } 
    .weirdinput:hover, .weirdinput:focus, .weirdhover, .weirdfocus { color: black; } 
</style> 

<input class="weirdinput" value="smth" /> 

<!--[if lt IE 8]><script type="text/javascript">(function() { 

    // Fix focus/hover for IE on all inputs with class 'weirdinput' 
    // 
    var inputs= document.getElementsByTagName('input'); 
    for (var i= 0; i<inputs.length; i++) { 
     var input= inputs[i]; 
     if (input.className.indexOf('weirdinput')!==-1) { 
      input.onmouseover= mouseover; 
      input.onmouseout= mouseout; 
      input.onfocus= focus; 
      input.onblur= blur; 
     } 
    } 

    function mouseover() { 
     this.className+= ' weirdhover'; 
    } 
    function mouseout() { 
     this.className= this.className.replace(' weirdhover', ''); 
    } 
    function focus() { 
     this.className+= ' weirdfocus'; 
    } 
    function blur() { 
     this.className= this.className.replace(' weirdfocus', ''); 
    } 

})();</script><![endif]--> 
0

你可以做的是,

  1. on focus將變量設置爲true;
  2. on blur將該變量設置爲false;並禁用true
  3. 如果onmouseover設置爲true,則將其設置爲false
  4. onmouseout set disabled僅當變量爲false時; (所以不集中)
0

我認爲你將有一個很大的麻煩此行爲,因爲無效字段將不會收到mouseover(或mouseenter,如果你的瀏覽器支持的話)事件。我甚至試圖在它下面的元素上捕獲事件,但禁用的字段會將其消除。

+0

它不?我不知道,每天都要學習新的東西。也許他可以使用readonly而不是禁用,如果他真的想要這種功能.. – CharlesLeaf 2010-05-26 13:22:42

+0

@CharlesLeaf:我也沒有。 :-)我很好奇,試了一下。 – 2010-05-26 13:30:40

0

禁用的字段未提交,不在關鍵的選項卡節點列表中,也不會收聽或傳遞事件。您禁用一個輸入,以便用戶不能更改其值。

沒有領域可以改變沒有得到重點。

您只能通過腳本更改禁用屬性,腳本可能來自頁面上其他位置的事件。

但是沒有名字,就像在你的例子中那樣,字段的值在任何情況下都不會以其形式被提交,那麼這個字段被禁用或者沒有被關閉會怎麼樣呢?

如果您的意圖是禁用該字段,如果javascript是而不是啓用,爲什麼不用css隱藏它並用腳本樣式顯示它?

相關問題