2013-02-13 47 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

相关问题