2011-03-11 41 views
1

在下面的示例頁面中,我爲IE獲得了不同於其他瀏覽器的輸出。IE中的隱藏字段被認爲是禁用的?

<html> 
<head> 
    <title>hidden fields test</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <form> 
     <input type="hidden" value="hidden1" /> 
     <input type="hidden" value="hidden2" /> 
     <input type="text" value="text1" /> 
     <input type="text" value="text2" /> 
    </form> 
    <script type="text/javascript"> 
     $(function() { 
      var inputs = $("form input:enabled"); 
      var concatenated = ''; 
      inputs.each(function() { 
       concatenated = concatenated + $(this).val(); 
      }); 

      alert(concatenated); 
     }); 
    </script> 
</body> 
</html> 

隨着IE 8(8.0.7600.16385),則輸出爲 「text1text2」,用鉻(10.0.648.127)和Firefox(3.6.13)它是 「hidden1hidden2text1text2」。這對我來說是意外的。這是IE或jQuery中的錯誤,還是瀏覽器中jQuery沒有考慮到的預期差異?

IE中的隱藏字段是否總是隱含「禁用」?

+0

你還沒有把'他們name'屬性 - 這可能是值得一試? – 2011-03-11 20:02:14

+0

@Craig:我嘗試給它們添加名字,但結果相同。 – 2011-03-11 22:54:20

+2

您會注意到jQuery UI爲跨瀏覽器兼容性隱藏輸入的方式是將它們用一個名爲ui-helper-hidden-accessible的類剪輯。這是由於你描述的行爲。如果您需要複製它,請查看[基本jQuery UI主題]的頂部佈局助手部分(http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/themes/base/jquery-ui的CSS)。 – lsuarez 2011-03-11 23:00:24

回答

4

看來,FF和Chrome假設,即使當它被認爲是啓用未禁用的元素是隱藏的。在IE中,似乎沒有做出假設,隱藏的輸入既不被視爲啓用或禁用。無論是$(「輸入:啓用」)或$(「輸入:禁用」),在IE瀏覽器的隱藏要素運行:

簡單在這裏測試:http://jsfiddle.net/KFu4t/4/

兩個FF和Chrome顯示輸入的啓用,但IE瀏覽器沒有按不顯示它啓用或禁用。

這是對jQuery的評論中指出:啓用了:

這不是在該文檔中明確說明,但是這似乎並沒有包含類型爲「隱藏」的投入。

http://api.jquery.com/enabled-selector/

3

改變這一行:

var inputs = $("form input:enabled"); 

到:

var inputs = $("form input:not(:disabled)"); 
+0

他是不是試圖啓用只有控件?也許還有另一種做法。 – 2011-03-11 20:02:46

+0

編輯爲更合適 – Neal 2011-03-11 20:04:30

+0

感謝您使用「:not(:disabled)」確保跨瀏覽器的一致性。但是根據傑里米的回答,幾乎看起來好像是靠運氣,基於IE看起來如何看待隱藏領域。我會好奇IE9是做什麼的。 – 2011-03-11 21:15:54