2011-03-28 35 views
0

我已經創建功能,用於創建一個div,當u selet在下拉框中,該值基於div的數量將要創建的長度,所以代碼是JavaScript的選定值

<select onchange="test()" id="selected_opt"> 
       <option value="0" selected>-Select-</option> 
       <option value="1">Communication</option> 
       <option value="2">XXXXXXXXXXXXX</option> 
          </select> 

功能測試是

function test(){ 
var result = get_id.options[get_id.selectedIndex].value; 
if(result == 1){ 

    var i = 0, 
    c = model_details_json.communication, 
    j = c.length, 
    communications_div = document.getElementById("model_communication"); 

    if(j == 0){ 
     alert('nothing'); 
    } 

    for (; i<j; i++){ 
     var communication = c[i]; 
     var create_div = document.createElement('div'); 
     create_div.id = 'communication_id'+i; 
     create_div.name = 'communication'; 
     var create_anchor = document.createElement('a'); 
     create_anchor.innerHTML = communication.communication_name; 
     communications_div.appendChild(create_div); 
     document.getElementById(create_div.id).appendChild(create_anchor); 
     create_anchor.setAttribute("href", "javascript:void(0);"); 
create_anchor.setAttribute("onclick","sample('"+communication.communication_name+"','"+create_div.name+"')"); 
      } 
     } 

例如長度6表示第六位的div將被創建,所以這個問題是什麼時,我在選擇下拉即通信再次點擊已經六週的div已創建的時候做然後agin六個div創建,所以當你做的時候創建12個div它又是它的6倍數.......

所以我需要的是div的數量不會重複。並且它應該驗證用戶是否在下拉列表中單擊相同的值

+0

的發言權長度爲3,當第一次點擊,將創建或追加3個的div,然後當我再幹其他3個div的創建等等共6 – Siva 2011-03-28 11:03:06

回答

-1

您可以在創建div之前使用getElementById('elementId')檢查div是否已經創建或存在。

像你Element對象的代碼

for (; i<j; i++){ 
    if(! document.getElementById('communication_id'+i)){ // do if element is not present on page 
    var communication = c[i]; 
    var create_div = document.createElement('div'); 
    create_div.id = 'communication_id'+i; 
    create_div.name = 'communication'; 
    var create_anchor = document.createElement('a'); 
    create_anchor.innerHTML = communication.communication_name; 
    communications_div.appendChild(create_div); 
    document.getElementById(create_div.id).appendChild(create_anchor); 
    create_anchor.setAttribute("href", "javascript:void(0);"); 
    create_anchor.setAttribute("onclick", 
      "sample('"+communication.communication_name+"','"+create_div.name+"')"); 
    } 
} 
+0

這如果用戶有6個div,並且希望在下一次迭代中使用4,則無法匹配requirment – niksvp 2011-03-28 11:47:07

+0

在這種情況下,您應該澄清一下您的問題,您需要在添加新的之前刪除所有創建的div。有3種做法 1)清除communications_div的innerHtml 2)爲所有創建的div分配一個通用名稱,並獲取這些通用document.getElementsByName,遍歷每個div並將其刪除。3)使用像jQuery這樣的JS框架讓你的生活變得簡單,在所有div上應用一些通用類,並在創建新類之前通過標識給定類的那些類來移除它們。 – 2011-03-28 13:44:41

-1

使用replaceChild()而不是appendChild()

+0

如果用戶有6個div,並且在下一次迭代中需要4個,這將無法匹配requinment – niksvp 2011-03-28 11:46:23

0

檢查this刪除div考慮到您的父分區model_communication元素。

您需要通過檢查div是否存在來實現邏輯,並在收到類似'Div已被移除'的消息時停止循環,如示例中所示。

爲了做到這一點與ID

var newdiv = document.createElement('div'); 
newdiv.setAttribute('id', id); 
0

您需要刪除所有div創建新的沿創建div元素。嘗試添加類名稱:

var create_div = document.createElement('div'); 
create_div.className = 'communication_div'; 
... 

現在您可以選擇div。之前的語句添加這些行與「communication_div」類名稱中刪除的div:

var divs = document.getElementsByClassName('communication_div'); 
for(var i=0; i<divs.length; i++) { 
    divs[i].parentNode.removeChild(divs[i]); 
} 

每個腳本運行將產生新的申報單,並刪除舊的。

0

使用js地圖對象將選定的值或長度作爲關鍵字放入地圖中,然後每次用戶單擊一個值時,首先檢查其在地圖中的存在。如果沒有在地圖中找到,那將意味着長度不會重複,div將被創建。

類似:

var selectedValues = new Array(); 
....... 
var result = get_id.options[get_id.selectedIndex].value; 
if(selectedValues["val_"+result]) { 
    return; 
} 
selectedValues["val_"+result] = true;