javascript - How to disable div(s) until previous div has been filled in -


i'm making drag , drop quiz, start have 4 questions in answers can picked , dropped corresponding question. want disable drop box questions 2,3,4 until question 1 answered. re-active q2 leaving 3,4 disabled , on.... i'm quite new javascript , have tried multiple ways this, including looking @ other situations similar mine on here have yet succeeded! have put screenshot of quiz far make clearer.

hopefully can help, thanks!

all code below:

html:

<!doctype html>  <head>     <link rel="stylesheet" type="text/css" href="style.css">     <script src="draganddrop.js"></script>  </head>  <body>      <div id="container">         <h1>san failure</h1>         <p>your san&#39;s raid controller has failed , corrupted significant amount of data.  need contact dr provider failover recovery environment whilst restore internal servers backup images.</p>     </div>      <div id="maincontainer">         <div id="dragscriptcontainer">             <div id="questiondiv">                 <p><strong>task one: damage control</strong></p>                  <div class="dragdropsmallbox textbox" id="q1">1. find relevant ip address affected hardware</div><div class="destinationbox"></div>                 <div class="dragdropsmallbox textbox" id="q2">2. notify disaster recovery provider</div><div class="destinationbox"></div>                 <div class="dragdropsmallbox textbox" id="q3">3. inform team of directors of situation</div><div class="destinationbox"></div>                 <div class="dragdropsmallbox textbox disabled="true"" id="q4">4. update emergency phone message</div><div class="destinationbox"></div>              </div>              <div class="feedback">                 <div id="feedback"></div>                 <div id="counter">0</div>                 <div id="result"></div>             </div>              <div class="container">                  <h1 style="text-align:center">disaster recovery runbook</h1>                  <!-- page 1 -->                 <h5 style="color: red; ">page 1</h5>                 <h2>executive summary</h2>                 <p>[acme ltd. company information]<br>acme ltd. has 9 virtual servers , 4 physical servers hosted @ onsite data centre.<br>the key staff required recovery [it manager], [backup manager] , [disaster recovery provider]. servers must recovered within 8 hours of invocation.                  </p>                  <!-- page 2 -->                 <h5 style="color: red; ">page 2</h5>                 <h2>contents</h2>                 <p><strong>                     invoking disaster recovery<br>                     key contacts<br>                     call tree<br>                     emergency phone message<br>                     network diagram<br>                     recovery locations<br>                     software license , registration keys<br>                     event log<br>                     recovery templates                 </strong></p>                  <!-- page 3 -->                 <h5 style="color: red; ">page 3</h5>                 <h2>invoking disaster recovery</h2>                 <p>if crisis or disaster has occurred, business continuity manager must decide course of action. if, whatever reason, business continuity manager unable perform these duties, refer cascading decision-making hierarchy below.<br>only senior member authorized invoke dr plan, subject availability.<br>1. business continuity manager<br>2. director<br>3. manager<br>4. administrator<br>in event none of stated staff members available&#46;&#46;&#46;good luck.</p>                 <div id="answerdiv">                 <!-- page 4 -->                 <h5 style="color: red; ">page 4</h5>                 <h2>key contacts</h2>                 <main class="flex-center">                          <table>                             <tr>                                 <td><p><strong>contact</strong></p></td>                                 <td><p><strong>telephone number</strong></p></td>                                 <td><p><strong>email address</strong></p></td>                             </tr>                             <tr>                                 <td><p>managing director</p></td>                                 <td><div class="dragdropsmallbox" id="a3">0123456789</div></td>                                 <td><div class="dragdropsmallbox" id="a10">m.d@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>financial director</p></td>                                 <td><div class="dragdropsmallbox" id="a10">1234567890</div></td>                                 <td><div class="dragdropsmallbox" id="a10">f.d@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>business continuity manager</p></td>                                 <td><div class="dragdropsmallbox" id="a10">2345678901</div></td>                                 <td><div class="dragdropsmallbox" id="a10">b.c.d@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>sales manager</p></td>                                 <td><div class="dragdropsmallbox" id="a10">3456789012</div></td>                                 <td><div class="dragdropsmallbox" id="a10">s.m@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>production manager</p></td>                                 <td><div class="dragdropsmallbox" id="a10">4567890123</div></td>                                 <td><div class="dragdropsmallbox" id="a10">p.m@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>hr director</p></td>                                 <td><div class="dragdropsmallbox" id="a10">5678901234</div></td>                                 <td><div class="dragdropsmallbox" id="a10">h.r.d@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>backup manger</p></td>                                 <td><div class="dragdropsmallbox" id="a10">6789012345</div></td>                                 <td><div class="dragdropsmallbox" id="a10">b.m@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>power supplier</p></td>                                 <td><div class="dragdropsmallbox" id="a10">7890123456</div></td>                                 <td><div class="dragdropsmallbox" id="a10">p.s@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>internet supplier</p></td>                                 <td><div class="dragdropsmallbox" id="a10">8901234567</div></td>                                 <td><div class="dragdropsmallbox" id="a10">i.s@acme.com</div></td>                             </tr>                             <tr>                                 <td><p>disaster recovery supplier</p></td>                                 <td><div class="dragdropsmallbox" id="a2">9012345678</div></td>                                 <td><div class="dragdropsmallbox" id="a10">d.r.s@acme.com</div></td>                             </tr>                         </table>                 </main>                  <!-- page 5 -->                 <h5 style="color: red; ">page 5</h5>                 <h2>call tree</h2>                 <img class="calltree" src="img/call_tree.jpg">                  <!-- page 6 -->                 <h5 style="color: red; ">page 6</h5>                 <h2>emergency phone message</h2>                 <p>we have distributed emergency call cards staff, containing number emergency phone line in disaster. should update message alert staff members presence of disastrous event, , every time there change in circumstances &#45; either towards or away resolution.<br> update message call number below:</p>                   <div class="dragdropsmallbox" id="a4">update emergency phone line</div><br><br>                  <!-- page 7 -->                 <h5 style="color: red; ">page 7</h5>                 <h2>network diagram service information</h2>                 <main class="flex-center">                         <table>                             <tr>                                 <td><p><strong>service</strong></p></td>                                 <td><p><strong>ip address</strong></p></td>                             </tr>                             <tr>                                 <td><p>email</p></td>                                 <td><div class="dragdropsmallbox" id="a10">192.0.0.1</div></td>                             </tr>                             <tr>                                 <td><p>web server</p></td>                                 <td><div class="dragdropsmallbox" id="a10">192.0.0.2</div></td>                             </tr>                             </tr>                             <tr>                                 <td><p>mpls</p></td>                                 <td><div class="dragdropsmallbox" id="a10">192.0.0.3</div></td>                             </tr>                             <tr>                                 <td><p>voip</p></td>                                 <td><div class="dragdropsmallbox" id="a10">192.0.0.4</div></td>                             </tr>                             <tr>                                 <td><p>san server</p></td>                                 <td><div class="dragdropsmallbox" id="a1">192.0.0.5</div></td>                             </tr>                             <tr>                                 <td><p>crm server</p></td>                                 <td><div class="dragdropsmallbox" id="a10">192.0.0.6</div></td>                             </tr>                         </table>                     </main>  </div>       <div id="dragcontent"></div>                     </div>                 </div>             </div>             <div id="buttons">                 <input type="button" onclick="dragdropresetform();return false" value="reset">                 <input type="button" onclick="clearfields();" id="clear" value="clear">                 <input type="button" onclick="showresults();" id="result" value="result">             </div>         </body>         </html> 

javascript:

var shufflequestions = true; var shuffleanswers = false; var lockedafterdrag = true;  function quizisfinished() {        alert('finished!'); }  var dragcontentdiv = false; var dragcontent = false;  var dragsource = false; var dragdroptimer = -1; var destinationobjarray = new array(); var destination = false; var dragsourceparent = false; var dragsourcenextsibling = false; var answerdiv; var questiondiv;     var sourceobjectarray = new array(); var arrayofemptyboxes = new array(); var arrayofanswers = new array();  function gettoppos(inputobj) {            if(!inputobj || !inputobj.offsettop)return 0;            var returnvalue = inputobj.offsettop;     while((inputobj = inputobj.offsetparent) != null)returnvalue += inputobj.offsettop;     return returnvalue; }  function getleftpos(inputobj) {     if(!inputobj || !inputobj.offsetleft)return 0;       var returnvalue = inputobj.offsetleft;     while((inputobj = inputobj.offsetparent) != null)returnvalue += inputobj.offsetleft;     return returnvalue; }  function cancelevent() {     return false; }  function initdragdrop(e) {     if(document.all)e = event;     if(lockedafterdrag && this.parentnode.parentnode.id=='questiondiv')return;     dragcontentdiv.style.left = e.clientx  + math.max(document.documentelement.scrollleft,document.body.scrollleft) + 'px';     dragcontentdiv.style.top = e.clienty  + math.max(document.documentelement.scrolltop,document.body.scrolltop) + 'px';     dragsource = this;     dragsourceparent = this.parentnode;     dragsourcenextsibling = false;     if(this.nextsibling)dragsourcenextsibling = this.nextsibling;     if(!dragsourcenextsibling.tagname)dragsourcenextsibling = dragsourcenextsibling.nextsibling;      dragdroptimer=0;     timeoutbeforedrag();      return false; }  function timeoutbeforedrag(){     if(dragdroptimer>=0 && dragdroptimer<10){         dragdroptimer = dragdroptimer +1;         settimeout('timeoutbeforedrag()',10);         return;     }     if(dragdroptimer>=10){         dragcontentdiv.style.display='block';         dragcontentdiv.innerhtml = '';         dragcontentdiv.appendchild(dragsource);      }        }  function dragdropmove(e) {     if(dragdroptimer<10){         return;     }      if(document.all)e = event;      var scrolltop = math.max(document.documentelement.scrolltop,document.body.scrolltop);     var scrollleft = math.max(document.documentelement.scrollleft,document.body.scrollleft);      dragcontentdiv.style.left = e.clientx + scrollleft + 'px';     dragcontentdiv.style.top = e.clienty + scrolltop + 'px';      var dragwidth = dragsource.offsetwidth;     var dragheight = dragsource.offsetheight;       var objfound = false;      var mousex = e.clientx + scrollleft;     var mousey = e.clienty + scrolltop;      destination = false;     for(var no=0;no<destinationobjarray.length;no++){         var left = destinationobjarray[no]['left'];         var top = destinationobjarray[no]['top'];         var width = destinationobjarray[no]['width'];         var height = destinationobjarray[no]['height'];          destinationobjarray[no]['obj'].classname = 'destinationbox';         var subs = destinationobjarray[no]['obj'].getelementsbytagname('div');         if(!objfound && subs.length==0){             if(mousex < (left/1 + width/1) && (mousex + dragwidth/1) >left && mousey < (top/1 + height/1) && (mousey + dragheight/1) >top){                 destinationobjarray[no]['obj'].classname='dragcontentover';                 destination = destinationobjarray[no]['obj'];                                    objfound = true;             }                }        }      sourceobjectarray['obj'].classname='';      if(!objfound){         var left = sourceobjectarray['left'];         var top = sourceobjectarray['top'];         var width = sourceobjectarray['width'];         var height = sourceobjectarray['height'];          if(mousex < (left/1 + width/1) && (mousex + dragwidth/1) >left && mousey < (top/1 + height/1) && (mousey + dragheight/1) >top){             destination = sourceobjectarray['obj'];             sourceobjectarray['obj'].classname='dragcontentover';         }     }     return false; }   function dragdropend() {     if(dragdroptimer<10){         dragdroptimer = -1;         return;     }     dragcontentdiv.style.display='none';     sourceobjectarray['obj'].style.backgroundcolor = '#fff';     if(destination){         destination.appendchild(dragsource);         destination.classname='destinationbox';           if(!destination.id || destination.id!='answerdiv'){             var previousel = dragsource.parentnode.previoussibling;             if(!previousel.tagname)previousel = previousel.previoussibling;             var numericid = previousel.id.replace(/[^0-9]/g,'');             var numericidsource = dragsource.id.replace(/[^0-9]/g,'');              if(numericid==numericidsource){                 dragsource.classname='correctanswer';                 checkallanswers();               }              else                 dragsource.classname='wronganswer';           }          if(destination.id && destination.id=='answerdiv'){             dragsource.classname='dragdropsmallbox';         }      } else{         if(dragsourcenextsibling)             dragsourcenextsibling.parentnode.insertbefore(dragsource,dragsourcenextsibling);         else             dragsourceparent.appendchild(dragsource);     }      if(numericid==numericidsource) {         document.getelementbyid('feedback').innerhtml = "";         document.getelementbyid('feedback').innerhtml += 'correct answer!';      }       else {         document.getelementbyid('feedback').innerhtml = "";         document.getelementbyid('feedback').innerhtml += 'incorrect answer! have tried this...';         incrementscore();     }          dragdroptimer = -1;         dragsourcenextsibling = false;         dragsourceparent = false;         destination = false;     }       function checkallanswers()     {            for(var no=0;no<arrayofemptyboxes.length;no++){             var sub = arrayofemptyboxes[no].getelementsbytagname('div');             if(sub.length==0)return;              if(sub[0].classname!='correctanswer'){                 return;             }             }             quizisfinished();        }      function resetpositions()     {         if(dragdroptimer>=10)return;          for(var no=0;no<destinationobjarray.length;no++){             if(destinationobjarray[no]['obj']){                 destinationobjarray[no]['left'] = getleftpos(destinationobjarray[no]['obj'])                 destinationobjarray[no]['top'] = gettoppos(destinationobjarray[no]['obj'])               }                 }         sourceobjectarray['left'] = getleftpos(answerdiv);         sourceobjectarray['top'] = gettoppos(answerdiv);             }       function initdragdropscript()     {         dragcontentdiv = document.getelementbyid('dragcontent');          answerdiv = document.getelementbyid('answerdiv');         answerdiv.onselectstart = cancelevent;         var divs = answerdiv.getelementsbytagname('div');         var answers = new array();          for(var no=0;no<divs.length;no++){             if(divs[no].classname=='dragdropsmallbox'){                 divs[no].onmousedown = initdragdrop;                 answers[answers.length] = divs[no];                 arrayofanswers[arrayofanswers.length] = divs[no];             }          }             if(shuffleanswers){             for(var no=0;no<(answers.length*10);no++){                 var randomindex = math.floor(math.random() * answers.length);                 answerdiv.appendchild(answers[randomindex]);             }                }          sourceobjectarray['obj'] = answerdiv;         sourceobjectarray['left'] = getleftpos(answerdiv);         sourceobjectarray['top'] = gettoppos(answerdiv);         sourceobjectarray['width'] = answerdiv.offsetwidth;         sourceobjectarray['height'] = answerdiv.offsetheight;           questiondiv = document.getelementbyid('questiondiv');          questiondiv.onselectstart = cancelevent;         var divs = questiondiv.getelementsbytagname('div');          var questions = new array();         var questionsopenboxes = new array();           for(var no=0;no<divs.length;no++){             if(divs[no].classname=='destinationbox'){                 var index = destinationobjarray.length;                 destinationobjarray[index] = new array();                 destinationobjarray[index]['obj'] = divs[no];                 destinationobjarray[index]['left'] = getleftpos(divs[no])                 destinationobjarray[index]['top'] = gettoppos(divs[no])                 destinationobjarray[index]['width'] = divs[no].offsetwidth;                 destinationobjarray[index]['height'] = divs[no].offsetheight;                 questionsopenboxes[questionsopenboxes.length] = divs[no];                 arrayofemptyboxes[arrayofemptyboxes.length] = divs[no];             }             if(divs[no].classname=='dragdropsmallbox'){                 questions[questions.length] = divs[no];             }          }          if(shufflequestions){             for(var no=0;no<(questions.length*10);no++){                 var randomindex = math.floor(math.random() * questions.length);                  questiondiv.appendchild(questions[randomindex]);                             questiondiv.appendchild(questionsopenboxes[randomindex]);                         destinationobjarray[destinationobjarray.length] = destinationobjarray[randomindex];                 destinationobjarray.splice(randomindex,1);                    questionsopenboxes[questionsopenboxes.length] = questionsopenboxes[randomindex];                 questionsopenboxes.splice(randomindex,1);                 questions[questions.length] = questions[randomindex];                 questions.splice(randomindex,1);                   }                }          questiondiv.style.visibility = 'visible';         answerdiv.style.visibility = 'visible';          document.documentelement.onmouseup = dragdropend;            document.documentelement.onmousemove = dragdropmove;             settimeout('resetpositions()',150);         window.onresize = resetpositions;     }      function incrementscore(){         counter = document.getelementbyid('counter');         counter.innerhtml++;     }      function showresults() {          result = document.getelementbyid('result');          if(counter.innerhtml < 2){             result.innerhtml += 'well done!';         } else {             result.innerhtml += 'not great!';         }     }      /* reset form */     function dragdropresetform()     {         for(var no = 0; no < arrayofanswers.length; no++){             arrayofanswers[no].classname='dragdropsmallbox'             answerdiv.appendchild(arrayofanswers[no]);                       }          document.getelementbyid('score').innerhtml = "";      }      function clearfields() {         document.getelementbyid("questiondiv").innerhtml = "";      }      window.onload = initdragdropscript; 

example

i suggest use jqueryui draggable , droppable interactions achieve want. contain many methods , events can use, example can disable droppable object using $( ".selector" ).droppable( "disable" );. can save trouble of creating methods dragging elements.


Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -