2011-01-25 43 views
0

我有一個javascript函數,我寫了一個基於單選按鈕的單選框添加選擇框。它在點擊一個或另一個時執行此操作。問題是,我是一個業餘愛好者,我無法停止添加新的選擇元素到我設置的範圍內。我一直嘗試不同的方法來檢查元素或其innerHtml是否已設置並且然後使用該檢查來決定是否創建另一個選擇。這一切都沒有爲我工作。任何人都可以爲我指出一個教程的方向(我一直在尋找,嘗試幾乎所有東西,沒有fez,這讓我覺得它是整個函數結構的一個簡單問題)。Javascript完成業餘?

這裏是代碼,任何光照在這將是超級有用。我只是自學自己的代碼,所以我知道這太可怕了。謝謝您的幫助!!

function moreInput(vInput) { 
var moreD = document.getElementById('moreD'); 
//document.write(moreD); 
    if(vInput == \"approved\") { 
     if(moreD.length > 0) { 
      moreD.removeChild(approvedOpts); 
     } 
     var select = document.createElement(\"select\"); 
     select.options[0] = new Option('a'); 
     select.options[1] = new Option('b'); 
     select.options[2] = new Option('c'); 
     select.setAttribute(\"name\",\"approvedOptsA\"); 
    } 
    if(vInput == \"denied\") { 
     //alert(moreD.innerHtml); 
     //if(moreD.innerHtml === 'undefined') { 
      //moreD.removeChild(approvedOptsD); 
      var select = document.createElement(\"select\"); 
      select.options[0] = new Option('x'); 
      select.options[1] = new Option('y'); 
      select.options[2] = new Option('z'); 
      select.setAttribute(\"id\",\"approvedOptsD\"); 
      select. 
     //} 
    } 
moreD.appendChild(select); 

}

+1

也許你可以刪除不必要的反斜槓,使這個更容易閱讀?即使對於你自己,也不要「回聲」長的Javascript字符串,只需將它直接寫入HTML或.js文件即可。 – deceze 2011-01-25 07:07:00

+0

我的不好,所有的html /前端的東西都是由PHP輸出的,只是把這個函數放在一個單獨的js文件中進行簡化 – 2011-01-25 07:29:04

回答

0

刪除所有元素,然後添加任何新元素。

此代碼應工作:

<script type=\"text/javascript\"> 

function moreInput(vInput) { 
    var moreD = document.getElementById('moreD'); 
     if(vInput == \"approved\") { 
      removeAllChildrens(moreD); 
      var select = document.createElement(\"select\"); 
      select.options[0] = new Option('Comped Table'); 
      select.options[1] = new Option('Comped Drink'); 
      select.options[2] = new Option('Comped Cover'); 
      select.setAttribute(\"name\",\"approvedOptsA\"); 
     } 
     if(vInput == \"denied\") { 
       removeAllChildrens(moreD); 
       var select = document.createElement(\"select\"); 
       select.options[0] = new Option('Need to Reserve Table'); 
       select.options[1] = new Option('At Capacity'); 
       select.options[2] = new Option('Private Event'); 
       select.setAttribute(\"id\",\"approvedOptsD\"); 
     } 
    moreD.appendChild(select); 
} 

function removeAllChildrens(cell) { 
    if (cell.hasChildNodes()) { 
     while (cell.childNodes.length >= 1) { 
      cell.removeChild(cell.firstChild);  
     } 
    } 
} 

</script> 
0

你永遠只能追加新的選擇,你需要附加一個新的之前刪除舊的。試試下面的代碼(我已經刪除您的註釋行):

function moreInput(vInput) { 
    var moreD = document.getElementById('moreD'); 
    if(vInput == "approved") { 
     if(moreD.length > 0) { 
      moreD.removeChild(approvedOpts); 
     } 
     var select = document.createElement("select"); 
     select.options[0] = new Option('a'); 
     select.options[1] = new Option('b'); 
     select.options[2] = new Option('c'); 
     select.setAttribute("name","approvedOptsA"); 
    } 
    if(vInput == "denied") { 
     var select = document.createElement("select"); 
     select.options[0] = new Option('x'); 
     select.options[1] = new Option('y'); 
     select.options[2] = new Option('z'); 
     select.setAttribute("id","approvedOptsD"); 

    } 
moreD.removeChild(document.getElementById("approvedOptsD")); 
moreD.removeChild(document.getElementById("approvedOptsA")); 
moreD.appendChild(select); 

它可能會拋出一些警告,我沒有測試它,但你應該得到的,你在找什麼想法。

This是和老,但仍然準確和有用的文章添加和刪除動態javascript的dom節點。