2010-06-09 48 views
2

我試圖有條件地啓用或禁用基於變量的值的HTML輸入。 「禁用」部分運行良好,但「啓用」不是,我不明白爲什麼。堅持有條件地啓用或禁用與JQuery輸入

代碼:

<--if variable is true...--> 
<div id="disabledSearch" class="searchBox disabled"> 
    <script type="text/javascript"> 
     $('#disabledSearch :input').attr('disabled', true); 
    </script> 

<--if variable is false--> 
<div id="enabledSearch" class="searchBox"> 
    <script type="text/javascript"> 
     //This line isn't working: 
     $('#enabledSearch :input').removeAttr('disabled'); 
    </script> 
+3

在附註上,您應該使用'attr('disabled','disabled')'來禁用輸入元素。 – 2010-06-09 13:55:13

+0

感謝您指出了這一點! – dmr 2010-06-09 13:59:27

+1

我不同意「禁用」比簡單布爾值「true」更正確的值。該屬性在DOM規範中被明確定義爲布爾型,並且將其設置爲「true」適用於我所知道的每個瀏覽器。我相信這個概念源於需要給XHTML文檔中的屬性賦值,而不是像HTML中那樣簡單地爲它提供價值。然而,這與該屬性如何從Javascript操作無關。 – Pointy 2010-06-09 14:10:35

回答

0

感謝@pointy - 我現在的順序改變了它的工作原理

編輯:我似乎無法找到@pointy這給了我這個想法的評論。然而,解決方案是我改變了頁面上元素和javascript的順序。

+1

這看起來像**評論**。沒有答案。請使用評論功能。你在這裏問了超過50個問題。你應該對這裏的工作有個很好的想法。 (在您的問題中發佈相關代碼是另一個示例。) – user113716 2010-06-09 15:55:28

+1

如果您打算參考您的解決方案,請具體說明。我沒有看到@Pointy對於訂單評論或回答的任何地方。因此,這個*答案*沒有幫助。 – user113716 2010-06-09 15:55:43

1

代替removeAttr 嘗試

$('#enabledSearch :input').attr('disabled', false); 

注:只是一個建議,但你或許應該這樣做在$(文件)。就緒()函數。這會清理一些你有的重複代碼。


編輯

看代碼遷移到$(文件)。就緒(函數(){});並根據條件使用$ .toggle()函數在輸入上切換禁用。請注意,如果僅在服務器端引用該條件,則可以通過將其置於隱藏輸入中來暴露客戶端的標誌。

個人而言,我會做這樣的事情假設你有股利

<div id="searchDiv" class="searchBox <%=SearchIsDisabled ? "disabled" : "enabled"%>"> 
    <input name="myinput" value="" type="text" /> 
</div> 

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#searchDiv.disabled input).attr('disabled', true); 
      $("#searchDiv.enabled input).attr('disabled', false); 
     }) 
</script> 
+0

'removeAttr'絕對應該爲此工作,我自己也用過很多次。 – 2010-06-09 13:54:22

+0

我試過了 - 它也沒有工作。 – dmr 2010-06-09 13:55:05

3

我這個玩逛了下位有效輸入 - 退房http://jsbin.com/ayoye3

input.attr('disabled',true)input.attr('disabled',false)成功切換投入。

唯一的可能性是你沒有選擇正確的元素,所以代碼看起來不起作用。確保你的選擇器正在選擇正確的節點,或者在這裏共享更多的代碼 - 你可能需要將你的函數放在一個包裝器中,以確保它們只在DOM被加載後才執行。

另外,你是否得到任何與js相關的瀏覽器錯誤?