2013-11-15 42 views
0

我是javascript新手,需要一些幫助。在div中添加和刪除li中的項目而不刷新頁面

我有一個窗體標籤裏有他自己的提交按鈕的div標籤。在這個div標籤裏面,我有一個combox和一些名字,還有兩個按鈕,一個用來在列表中添加一個項目(li),另一個用於刪除它。

我的問題是,當我選擇一個名稱,然後按下添加按鈕,我打電話給javascript函數,但它也刷新我的html頁面。我不想那樣。

我該怎麼辦?

沒有窗體標籤,它工作得很好。

問候

下面是代碼:

<@s.form action="confuserpermission" theme="simple"> 
<@s.hidden name="saveuserpermission" value="true"/> 
<div style="float: left; margin-top: 0.8em;"> 
    <h5 style="color: #1E1E1E;">Login Utilizador:</h5> 
<div class="input"> 
    <@s.textfield name="confUserBean.name" label="Nome" cssClass="input"/> 
</div> 
<div style="display: inline"> 
    <h5 style="color: #1E1E1E; display: inline">Escolhe e Adiciona uma Entidade</h5> 
    <select id="entityList"> 
     <option value="default">-----Select-----</option> 
     <@s.iterator value="listaEntidades"> 
      <option value="<@s.property />"><@s.property /></option> 
     </@s.iterator> 
    </select> 
    <button class="submit" onclick="adicionaEntidade()">Adicionar</button> <button class="submit" onclick="removaEntidade()">Remover</button> 
    <ul id="myList"></ul> 
</div> 

<script> 
    function isInArray(value, array) { 
     return array.indexOf(value) > -1 ? true : false; 
    } 
    function checkIfEntityIsAlreadyInList(entidade) { 
     var texts = [], lis = document.getElementById("myList").childNodes; 
     for (var i = 0, im = lis.length; im > i; i++) { 
      texts.push(lis[i].firstChild.nodeValue); 
     } 
     return isInArray(entidade, texts); 
    } 
    function adicionaEntidade() 
    { 
     var e = document.getElementById("entityList"); 
     var entidade = e.options[e.selectedIndex].value; 
     if (entidade !== "default" && !checkIfEntityIsAlreadyInList(entidade)) { 
      var node = document.createElement("LI"); 
      var textnode = document.createTextNode(entidade); 
      var fileTypeNode = document.createElement("UL"); 
      var optionArray = ["PSX", "PS2", "XLS"]; 
      for (var option in optionArray) { 
       if (optionArray.hasOwnProperty(option)) { 
        var pair = optionArray[option]; 
        var checkbox = document.createElement("input"); 
        checkbox.type = "checkbox"; 
        checkbox.name = pair; 
        checkbox.value = pair; 
        fileTypeNode.appendChild(checkbox); 
        var label = document.createElement('label'); 
        label.htmlFor = pair; 
        label.appendChild(document.createTextNode(pair)); 
        fileTypeNode.appendChild(label); 
        //fileTypeNode.appendChild(document.createElement("br")); 
       } 
      } 

      node.appendChild(textnode); 
      node.appendChild(fileTypeNode); 
      document.getElementById("myList").appendChild(node); 
     } 
    } 
    function removaEntidade() 
    { 
     var e = document.getElementById("entityList"); 
     var entidade = e.options[e.selectedIndex].value; 
     if (entidade !== "default" && checkIfEntityIsAlreadyInList(entidade)) { 
      var lis = document.getElementById("myList").childNodes; 
      var indexOfChildToRemove = -1; 
      for (var i = 0, im = lis.length; im > i; i++) { 
       if(lis[i].firstChild.nodeValue === entidade){ 
        indexOfChildToRemove = i; 
        break; 
       } 
      } 
      if(indexOfChildToRemove>-1){ 
       document.getElementById("myList").childNodes[indexOfChildToRemove].remove(indexOfChildToRemove); 
      } 
     } 
    } 
</script> 
<div class="submit"> 
    <@s.submit theme="xhtml" value="Guardar"/> 
</div> 

回答

0

更換

<button class="submit" onclick="adicionaEntidade()">Adicionar</button> <button class="submit" onclick="removaEntidade()">Remover</button> 

通過

<button class="submit" onclick="adicionaEntidade()">Adicionar</button> <button class="submit" onclick="removaEntidade(); return false">Remover</button> 

事情是這個按鈕提交表單,並重新加載頁面。使用onclick函數製作return false可防止提交表單。

0

可以按如下方式將不會提交表單與input type="button"修改按鈕:

<input type="button" class="submit" onclick="adicionaEntidade()" value="Adicionar"/> 
<input type="button" class="submit" onclick="removaEntidade()" value="Remover"/>