2013-05-21 57 views
2

我想編寫一個java腳本函數,它將從td中獲取類型爲「checkbox」的輸入標籤,並將其標記爲未選中狀態。以下是jsp代碼:獲取輸入標籤並將其設置爲未選中

<td id="uncheckedByDefault" align=center class=listTypeOne> 
    <% if (priv.getViewPrivilege() == 1) { %> 
    <input name="view" type="checkbox" value='<%= priv.getAttributeId() %>' checked>      
    <% } else { %> 
    <input name="view" type="checkbox" value='<%= priv.getAttributeId()%>'> 
    <% } %> 
</td> 

現在這裏的td有id =「uncheckedByDefault」。我想獲取所有輸入標籤並將其設置爲未選中狀態。任何人都可以告訴我該怎麼做。提前致謝。

+0

爲什麼不改變上述碼?爲什麼使用JavaScript? – 2013-05-21 07:41:51

+0

@NOX我將我的答案發布爲Java的JSP代碼。他似乎使用Java,因爲他使用'<%'標記,但將他的問題標記爲'JavaScript',並提議將其重新標記爲'Java',但他拒絕了。我不確定OP使用哪種語言,或者想用什麼語言來解決他的問題。這真的不清楚。 – DaGLiMiOuX

+0

@DaGLiMiOuX他說:「我想獲得所有的輸入標籤,並將它們設置爲未選中狀態。」所以只需要刪除'if/else'塊,並從代碼中刪除'checked'屬性!我認爲這裏缺少一些東西。 – 2013-05-21 07:49:12

回答

2

嘗試:

inputs = document.getElementById('uncheckedByDefault').getElementsByTagName('input'); 

    for (index = 0; index < inputs.length; ++index) { 
     // deal with inputs[index] element. 
     inputs[index].checked=false; 
    } 
+0

我試過了,它工作。但唯一的問題,我正面臨一個更多的問題,因爲這一點,這是所有的網頁上的複選框都沒有選中。現在我已經確定,我已經使用該ID僅用於此td,而頁面上沒有其他td。出現在你腦海的原因是爲什麼會出現這種情況?是否因爲我們正在指定.getElementsByTagName()方法的輸入? – user1305398

+0

你的問題是讓所有在ID爲uncheckedByDefault的td中的複選框未被選中。所以這是唯一的代碼。未指定哪個複選框不被取消選中。 –

+0

所以理想情況下,上面的代碼應該只改變那些屬於id爲「uncheckedByDefault」的td的複選框。但問題是,無論td的頁面上的所有複選框都未被選中。 – user1305398

1

我不知道我是否理解你的問題,但我會試一試。

首先,你可以打印元素到你的網頁上,用<% ... %>(我會在我的回答中展示),所以你不必將條件設置爲<% ... %>,打印一個元素等等。全部使用相同的Java函數。其次,你可以訪問你的Object屬性,而不必調用你的getters。根本不需要,如果你想把他的價值設定到一個特定的領域。 (即)<input type="text" name="clientName" value="${client.clientName}" />

這是我對你的問題的建議:如果

<td id="uncheckedByDefault" align=center class=listTypeOne> 
    <% 
     if (priv.getViewPrivilege() == 1) { 
      out.println("<input name='view' type='checkbox' + 
      value=" + priv.getAttributeId() + " checked = 'checked'>"); 
     } else { 
      out.println("<input name='view' type='checkbox' + 
      value=" + priv.getAttributeId() + ">"); 
     } 
    %> 
</td> 

報告它的工作,或者它不是你想要的。

UPDATE

如果你希望它們都選中,因爲你的元素,id屬性表明它。爲什麼你想檢查你的對象屬性來設置它checked或不?只需添加你的元素,而不要設置它的檢查屬性。

<input name='view' type='checkbox' value="${priv.attributeId}">

0

你只需要得到所有你感興趣的元素的列表,那麼你就需要對他們執行一些動作。我添加了forEachNode函數,因爲querySelectorAll函數實際上並不返回一個數組 - 它返回一個nodeList,它的語法和功能與數組類似,但省略了forEach函數。

注意:如果複選框被選中,則檢查複選框。屬性的實際值沒有被使用 - 只是它的存在或缺乏而決定了檢查狀態。因此,你可以寫任何東西而不是0到checked屬性。

編輯:上面的說明是不正確的。在html中可見的'checked'屬性和'checked'成員變量都控制着狀態。我更新了取消選中和檢查功能。

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function byId(e){return document.getElementById(e);} 

window.addEventListener('load', mInit, false); 

function mInit() 
{ 
} 

/* 
    func to be called takes 3 variables. currentElement, currentIndex, nodeList the element belongs to. 
*/ 
function forEachNode(nodeList, func) 
{ 
    var i, n = nodeList.length; 
    for (i=0; i<n; i++) 
    { 
     func(nodeList[i], i, nodeList); 
    } 
} 
/* 
function uncheck(elem) 
{ 
    elem.removeAttribute('checked'); 
} 

function check(elem) 
{ 
    elem.setAttribute('checked',0); 
} 
*/ 

function uncheck(elem) 
{ 
    elem.checked = false; 
    elem.removeAttribute('checked'); 
} 

function check(elem) 
{ 
    elem.checked = true; 
    elem.setAttribute('checked',0); 
} 



function checkAll() 
{ 
    var checkBoxElements = document.querySelectorAll('input[type=checkbox]'); 
    forEachNode(checkBoxElements, check); 
} 

function uncheckAll() 
{ 
    var checkBoxElements = document.querySelectorAll('input[type=checkbox]'); 
    forEachNode(checkBoxElements, uncheck); 
} 

</script> 
<style> 
</style> 
</head> 
<body> 
    <button onclick='uncheckAll()'>Uncheck all</button> 
    <button onclick='checkAll()'>Check all</button> 
    <br> 
    <input type='checkbox'/>CB 1 
    <br> 
    <input type='checkbox'/>CB 2 
    <br> 
    <input type='checkbox'/>CB 3 
    <br> 
    <input type='checkbox'/>CB 4 
    <br> 
    <input type='checkbox'/>CB 5 
    <br> 
</body> 
</html> 
+0

我很感謝你的回答(我不是OP),不會失望,但這不是他所臆測的(我認爲)。他正在與Java合作,但是這個問題被貼上了壞標籤。也許我錯了,但這是我的想法。我很抱歉:( – DaGLiMiOuX

+0

這真的沒有問題,沒有必要抱歉,我的想法差不多一樣,除非我認爲你錯過了javascript標記,並且OP提供了不相關的jsp代碼。 *關閉主題笑話*有多少互聯網論壇用戶需要擰螺絲燈泡?100. 1來完成這項工作,99來說明它應該如何完成。:-) – enhzflep

+0

哈哈不錯的一個笑話:D另外,我沒有錯過'javascript'標籤,但是他沒有在他的問題中說什麼語言想要這樣做,併發布了他的JSP代碼。答對不準確,因爲你可以用兩種語言提供解決方案。 – DaGLiMiOuX

0

這應該工作

var allInputs = document.getElementById("uncheckedByDefault").getElementsByTagName("input"); 
for (i = 0; i < allInputs.length; i++) { 
    if (allInputs[i].getAttribute("type") == 'checkbox') { 
     allInputs[i].removeAttribute("checked"); 
    } 
} 
+0

這就是我的想法。但是,如果用戶使用鼠標選中一個框,則刪除選中屬性的代碼不會清除該檢查。你可以在我給出的例子中看到。 (在我意識到雖然它'應該'起作用的情況下,我不得不編輯它,但它沒有) – enhzflep

+0

在這種情況下,您可以使用'allInputs [i] .checked = false;' – Vicky

+0

確實。使用這兩種方法意味着頁面將以與save btn命中時渲染相同的方式保存到磁盤。很好的保存表單答案。 – enhzflep

1

以下是你需要的功能,調用它,只要你想:

function uncheckAll(){ 
    var inputsContainer = document.getElementById('uncheckedByDefault'); 
    var allInputs = inputsContainer.getElementsByTagName('input'); 
    var len = allInputs.length; 
    for(var i=0; i<len; i++){ 
     if(allInputs[i].type == 'checkbox'){ 
     allInputs[i].checked = false; 
     } 
    } 
} 
相關問題