2013-02-13 46 views
0

我有一個骰子函數,將骰子的總和相乘,將總和存儲在一個變量中,並打印出總和。沒問題,但是當我運行應用程序兩次。第二個應用程序影響第一個應用程序的總和。從以前運行的應用程序獲得總和

我嘗試了localStorage,但沒有任何工作。這是我在兩個應用程序中顯示的最接近的結果

我希望能夠運行多個應用程序但不泄漏信息。 任何提示?

A jsFiddle http://jsfiddle.net/dymond/gUL9U/ < - 運行應用程序兩次,您會看到問題。

function dicesides_func(nr){ 
    // go to dice-window-wrapper again 
    // this could be put in a seporate functon 
    var elementToAddDice=" dice-window-wrapper ", 
    obj=this, // using this here that's why it's called wiht 
    dice,i=0,total=0; // all the dice in this dice window 
    // dicesides_func.call to set the right this context 
    if(nr) 
    { 
     while((" "+obj.className+" ").indexOf(elementToAddDice)==-1){ 
      obj=obj.parentNode; 
     } 
     obj=obj.getElementsByTagName("ul")[2]; 
     var dicessides = createElementWithClass('li',nr); 
     obj.appendChild(dicessides); 
     // calculate total (can do in a seporate function) 

     dice = obj.getElementsByTagName("li"); 
    } 
    else 
    { 
     dice = document.getElementsByClassName("dice"); 
    } 
    for(i=0;i<dice.length;i++){ 
     total=total+getNumberForClass(dice[i].className); 
    } 
    //alert(total); 

    var wrapper = document.getElementsByClassName("dice-toolbar-counter-wrapper")[0]; 

    while (wrapper.hasChildNodes()) { 
     wrapper.removeChild(wrapper.lastChild); 
    } 

    var ttl = total.toString(); 
    var arr = []; 
    for (var i = 0;i<ttl.length;i++) { 
     var digit = ttl[i]; 
     var newelem = createElementWithClass('li',"side-" + ttl[i]); 
     //alert(dice_toolbar_counter_wrapper_Li) 
     wrapper.appendChild(newelem); 
    } 

} 
+0

u能張貼小的代碼與它的錯誤? – allenhwkim 2013-02-13 23:34:46

+0

@bighostkim你是什麼意思? 當我調試它時,我不會得到任何錯誤。 – Dymond 2013-02-13 23:41:33

+0

我會檢測問題出在哪裏,然後詢問如何解決這個問題。除非我很無聊,否則我不會瀏覽所有的代碼。有人可能會。 – allenhwkim 2013-02-13 23:57:14

回答

1

試試這個代碼: Main.js

function pageWrap(){ 
    /* --------DIV TAGGAR MED CLASS -------- */ 

    var outerDiv = createElementWithClass('div', 'dice-window-wrapper'), 
    innerDiv = createElementWithClass('div', 'dice-menubar-wrapper'); 
    outerDiv.appendChild(innerDiv); 
    document.getElementById("page-content-wrapper").appendChild(outerDiv); 


    var dice_windows_wrapper_close = createElementWithClass('div', 'close'); 
    innerDiv.appendChild(dice_windows_wrapper_close); 

    var dice_toolbar_wrapper_close = createElementWithClass('div', 'dice-toolbar-wrapper'); 
    outerDiv.appendChild(dice_toolbar_wrapper_close); 

    var add_remove_roll = createElementWithOutClass('ul'); 
    dice_toolbar_wrapper_close.appendChild(add_remove_roll); 

    var dice_content_wrapper = createElementWithClass('div', 'dice-content-wrapper'); 
    outerDiv.appendChild(dice_content_wrapper); 

    var dice_toolbar_counter_wrapper_Ul = createElementWithClass('ul', 'dice-toolbar-counter-wrapper'); 
    dice_toolbar_wrapper_close.appendChild(dice_toolbar_counter_wrapper_Ul); 

    add_remove_roll_func("add","remove","roll"); 

    var lielement = createElementWithOutClass('li'); 
    add_remove_roll.appendChild(lielement); 

    lielement.appendChild(dice_toolbar_counter_wrapper_Ul); 

    /* <div class="dice-content-wrapper">*/ /*Visar tärningen som kastast*/ 
    var ul_dice_sides = createElementWithOutClass('ul'); 
    dice_content_wrapper.appendChild(ul_dice_sides); 

    /*###CREATE ADD_REMOVE_ROLL DICES ###*/ 
    function add_remove_roll_func(){ 
     for (var i = 0; i<arguments.length; i++){ 
      li_dice_side_one = createElementWithClass('li',arguments[i]); 
      add_remove_roll.appendChild(li_dice_side_one); 

     } 
    } 

    /*ADD EVENT*/ 
    function AddEvent(){ 
     var AddEvent = "add"; 
     var addClass= document.getElementsByClassName(AddEvent); 
     addClass=addClass[addClass.length-1]; 
     addClass.addEventListener("click", addDiceEvent, true); 
     var diceArray = Array=[ 
     "dice dice-side-one", 
     "dice dice-side-two", 
     "dice dice-side-three", 
     "dice dice-side-four", 
     "dice dice-side-five", 
     "dice dice-side-six"]; 
     function addDiceEvent() { 
      var rand = diceArray[Math.floor(Math.random() * diceArray.length)]; 
      dicesides_func.call(addClass,rand); 
      document.getElementById('mySound').play(); 
     } 
    } 
    AddEvent(); 
    /*ADD EVENT END*/    
    /*REMOVE DICE*/ 
    function RemoveEventDice(){ 
     var removeEvent = "remove"; 
     var removeClass= document.getElementsByClassName(removeEvent); 
     var remove=removeClass[removeClass.length-1]; 
     remove.addEventListener("click", removeDice, true); 

     function removeDice(e) { 
      var obj=e.target; 
      var elementToRemove=" dice-window-wrapper "; 
      while((" "+obj.className+" ").indexOf(elementToRemove)==-1){ 
       obj=obj.parentNode; 
      } 
      var allDiceInWindow=obj.getElementsByClassName("dice"); 
      var diceToRemove=allDiceInWindow[allDiceInWindow.length-1]; 
      diceToRemove.parentNode.removeChild(diceToRemove); 
      dicesides_func.call(remove);//dicesides_func(); 
     } 

    } 
    RemoveEventDice(); 
    /*REMOVE DICE END*/ 
    /*ROLL DICE*/ 
    function rollEvent(){ 
     var rollDices = "roll"; 
     var addClass= document.getElementsByClassName(rollDices); 
     addClass=addClass[addClass.length-1]; 
     addClass.addEventListener("click", rollDice, true); 
     var diceArray = Array=[ 
     "dice dice-side-one", 
     "dice dice-side-two", 
     "dice dice-side-three", 
     "dice dice-side-four", 
     "dice dice-side-five", 
     "dice dice-side-six"]; 
     function rollDice(e) { 
      var obj=e.target; 
      var elementToRemove = " dice-window-wrapper "; 
      while((" "+obj.className+" ").indexOf(elementToRemove)==-1){ 
       obj=obj.parentNode; 
      } 
      var allDiceInWindow=obj.getElementsByClassName("dice"); 
      for(var i = 0; i<allDiceInWindow.length; i++){ 
       // set the name individually for each die 
       var name = diceArray[Math.floor(Math.random() * diceArray.length)]; 
       allDiceInWindow[i].className = name; 
      } 
      dicesides_func.call(addClass);//dicesides_func(); 
     } 
    } 
    rollEvent(); 
    /*END ROLL DICE*/ 

    function CloseEvent(){ /*Behöver ändras om index sidan ändras*/ 
     var CloseEvent = "close"; 
     var addClassArr= document.getElementsByClassName(CloseEvent); 
     var addClass = addClassArr[addClassArr.length-1]; 
     addClass.addEventListener("click", closebutton, true); 
     function closebutton(e) { 
      var classToRemove = " "+"dice-window-wrapper"+" "; 
      var obj=e.target; 
      while((" "+obj.className+" ").indexOf(classToRemove)==-1){ 
       obj=obj.parentNode; 
      }   
      obj.parentNode.removeChild(obj); 
     } 
    } 

    CloseEvent();  
    movewrap(); 
} 

functioner.js

/*###CREATE ELEMENT WITH CLASS ###*/ 

function createElementWithClass(elementName, className) 
{ 
    var el = document.createElement(elementName); 
    el.className = className; 
    return el; 
} 

/*###CREATE ELEMENT WITHOUT CLASS ###*/ 
function createElementWithOutClass(elementName) 
{ 
    var el = document.createElement(elementName); 
    return el; 
} 
/*###CREATE ELEMENT WITH ID ###*/ 
function createElementWithId(elementName, idName) 
{ 
    var element = document.createElement(elementName); 
    element.id = idName; 
    return element; 
}  

/* Funktionen som visar nya tabort och kasta tärningarna ## END */ 

function getNumberForClass(className){ 
    var diceArray = Array=[ 
    "dice dice-side-one", 
    "dice dice-side-two", 
    "dice dice-side-three", 
    "dice dice-side-four", 
    "dice dice-side-five", 
    "dice dice-side-six"]; 
    return diceArray.indexOf(className)+1; 
} 

function dicesides_func(nr){ 
    var elementToAddDice=" dice-window-wrapper ", obj=this, dice,i=0,total=0; 
     while((" "+obj.className+" ").indexOf(elementToAddDice)==-1){ 
      obj=obj.parentNode; 
     } 
     obj=obj.getElementsByTagName("ul")[2]; 
    if(nr){ 
     var dicessides = createElementWithClass('li',nr); 
     obj.appendChild(dicessides); 
     dice = obj.getElementsByTagName("li"); 
    }else{ 
     dice = obj.getElementsByTagName("li"); 
    } 

    for(i=0;i<dice.length;i++){ 
     total=total+getNumberForClass(dice[i].className); 
    } 

// console.log(obj.parentNode.parentNode.className.getElmentsByClassName[]); 

    var wrapper = obj.parentNode.parentNode.getElementsByClassName("dice-toolbar-counter-wrapper")[0]; 
    while (wrapper.hasChildNodes()) { 
     wrapper.removeChild(wrapper.lastChild); 
    } 
    var ttl = total.toString(); 
    for (var x = 0;x<ttl.length;x++) { 
     var newelem = createElementWithClass('li',"side-" + ttl[x]); 
     //alert(dice_toolbar_counter_wrapper_Li) 
     wrapper.appendChild(newelem); 
    } 
}  
+0

看看我沒有遵循我自己的建議^^,我寧願使用getElementById()併爲不同的包裝設置不同的ID,但這似乎工作。 – 2013-02-14 02:22:29

+1

基本上,我所做的就是改變 dicesides_func();到dicesides_func.call(addClass);因爲那麼變量「nr」返回了一個元素。然後我使用obj.parentNode.parentNode.getElementsByClassName(「dice-toolbar-counter-wrapper」)[0];檢索正確的計數包裝器並使用該包裝器代替文檔中的第一個包裝器。 – 2013-02-14 02:27:18

+0

這項工作就像一個魅力:) – Dymond 2013-02-14 09:30:38

0

選擇合適的包裝,你應該罰款:當您創建的應用程序以後哪個應用程序正在使用要知道也許使用全局計數器變量?

此部分選擇第一包裝:

var wrapper = document.getElementsByClassName("dice-toolbar-counter-wrapper")[0]; 

如果我改變了0到1的相反,我亂七八糟UPP申請號2而不是1,因爲實際上選擇的陣列中的[0]鍵的包裝。

Snyggt btw!

+0

@lesus Sonesson。 Tack :),但我也許可以使用for循環來捕獲類?不知道如何將它連接到var wrap你 – Dymond 2013-02-14 01:07:54

+0

意識到它更多的是,你使用getElementsByClassName相當頻繁。 注意,撈出rollEvent當你有多個實例不能正常工作,這是因爲他們的指望創建 所有骰子你需要傳遞一個變量dicesides_func(),這表示您與 – 2013-02-14 01:24:16

+0

通信的應用程序的哪個實例實際上,移除和滾動事件沒有連接,因爲我不需要它們來顯示問題。對不起,如果我現在很慢,但你如何意味着匹配的包裝鑰匙。我知道,如果我將索引從0更改爲1,它會將總和移至窗口2 ..但正如您現在所知道的那樣。不要如何使它獨立於窗口 – Dymond 2013-02-14 01:30:21

相關問題