dmcFunctions.js代码 SCORM RTE客户端的另外一套精密设备!(转)


具体代码

// JavaScript Document
function Trim(s) 
{
// Remove leading spaces and carriage returns

while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
{
  s = s.substring(1,s.length);
}

// Remove trailing spaces and carriage returns

while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
{
  s = s.substring(0,s.length-1);
}
return s;
}

// Global variables
var IntraNavigation = false

/*******************************************************************************
**
** This function is used to go to another page of a multi-page SCO
**
** Inputs: page - the location that we're bookmarking
**
**
*******************************************************************************/
function GoToPage( page )
{
    IntraNavigation = true;
    
    // replace the current page with the page specified
    window.location.replace( page );
}

/*******************************************************************************
**
** This function asks the LMS if there exists a previous SCO or Asset to go to.
** If a SCO or Asset exists, then the previous button is displayed.
**
** Inputs: None
**
** Return: String - "true" if the previous button should be displayed
**             "false" if failed.
**
*******************************************************************************/
function renderPreviousButton()
{
  var value = retrieveDataValue( "adl.nav.request_valid.previous" );
  return value;
}

/*******************************************************************************
**
** This function asks the LMS if there exists a next SCO or Asset to continue
** to. If a SCO or Asset exists, then the continue button is displayed.
**
** Inputs: None
**
** Return: String - "true" if the continue button should be displayed
**             "false" if failed.
**
*******************************************************************************/
function renderContinueButton()
{                               
  var value = retrieveDataValue( "adl.nav.request_valid.continue" );
  return value;
}


/*******************************************************************************
**
** This function is used to go to a previous SCO
**
*******************************************************************************/
function Previous()
{
    // we request the previous SCO from the LMS
    storeDataValue("adl.nav.request", "previous");
    
    // we terminate this SCO's communication with the LMS
    terminateCommunication();
}

/*******************************************************************************
**
** This function is used to go to a next SCO
**
*******************************************************************************/
function Continue()
{
    // we request the next SCO from the LMS
    storeDataValue ("adl.nav.request", "continue");
    
    // we terminate this SCO's communication with the LMS
    terminateCommunication();
}


/*******************************************************************************
**
** This function is used to tell the LMS to set a bookmark
**
** Inputs: value - the location that we're bookmarking
**
** Return: None
**
*******************************************************************************/
function onUnexpectedExit( value )
{
    // set a bookmark
    storeDataValue( "cmi.location", value );
    
    // we're going to check to see if this is a "good" exit or a "bad" exit
    if ( IntraNavigation == false )
    {
        // terminate our communication with the LMS
        terminateCommunication();
    }
    else
    {
        IntraNavigation = false;
    }
}


/*******************************************************************************
**
** This function is used to by multi-page SCOs in the process of determining
** whether or not to display a next button on the last page of a multi-page SCO
**
** Inputs: None
**
** Return: None
**
*******************************************************************************/
function displayNext()
{
  // if there is somewhere to go next and previous enable the buttons     
    if ( renderContinueButton() == "true" ) 
  {
        document.getElementById("nextBtn").style.visibility = "visible";
    }
}

/*******************************************************************************
**
** This function is used to tell the LMS to initiate the communication session
** using the APIWrapper.js file as a pass through.
**
** Inputs: showNext - "false" (optional parameter)
**
** Return: String - "true" if the initialization was successful, or
**       "false" if the initialization failed.
**
*******************************************************************************/
function Initialize(showNext)
{
    if ( !(entryStatus == "resume") )
    {
          initializeCommunication();
    }
    // if there is somewhere to go next and previous enable the buttons     
    if ( renderContinueButton() == "true") 
  {
        if ( showNext != "false" ) document.getElementById("nextBtn").style.visibility = "visible";
    }

    
    if ( renderPreviousButton() == "true" ) 
    {
        document.getElementById("prevBtn").style.visibility = "visible";
    }


    // we need to determine if this is a new "learner attempt" or a
      // suspended "learner attempt
      var entryStatus = retrieveDataValue( "cmi.entry" );
  
  
    // check to see if this a resumption of a suspended learner attempt
    /***********************************************************
    ** Currently NOT needed (keep for future use/reminder)
    ************************************************************
    if ( entryStatus == "resume" )
    {
        var location = retrieveDataValue( "cmi.location" );
        
        // jump to the location we just retrieved
        
              //find the path name of the current SCO
              var path = getSCOLocation(currentSCO); //Need to recreate getSCOLocation function with method you decided to use
              var newLocation = path+location+".html";
              window.location.replace( newLocation );
    }
    *************************************************/
}

/*******************************************************************************
**
** Makes the appropriate calls for a normal exit calling Terminate and
** setting some data model elements for a normal exit
**
** Inputs: None
**
** Return: None
**
*******************************************************************************/
function Terminate()
{
  if (!IntraNavigation)
  {
    storeDataValue( "cmi.completion_status", "completed" );

    storeDataValue( "cmi.exit", "" );

    terminateCommunication();
  }
}


/********************************************************************************
** This function pops opens up a new window while the first one remains visible
**
** Inputs: String - The name/location of the page that will appear in the new window
**
** Return: A new window is open with the page specified
**
********************************************************************************/
function popup(pageName)
{     
    window.open(pageName, "newWindow", "resizable=yes,scrollbars=yes,width=800,height=600");
}


function disableSubmit()
{
    document.getElementById('submit').disabled = true;
    document.getElementById('reset').disabled = true;
}

function enableSubmit()
{
    document.getElementById( "submit" ).disabled = false;
    document.getElementById( "reset" ).disabled = false;
}

//-- BEGIN ASSESSMENT VALIDATION and FEEDBACK FUNCTIONS 

//initalize global variables
var correct = "Correct. ";
var incorrect = "Incorrect. ";
var alreadyAnswered = "You have already answered the question. Please click Next.";
var answerResult = "";


/*******************************************************************************
**
** This function validates any forms with radio button (i.e. true/false, multiple choice).
** It checks to see if the user selected an answer and prompts otherwies. Then it checks to see
** if the answer selected is the correct answer and sets the appropriate variables.
** Finally it calls displayFeedback and outputs the result to the user.
** 
**
** Inputs:     formObj - string - the name of the form
**               correctAnswer - string - the corret answer to the question
**               feedback - string - the text to be displayed on screen
**               index -
**               next - the url of the nextPage
**
** Return: IsOK - Boolean, states whether an answer was selected true=yes, false=no
**
*******************************************************************************/
function radio_validate(formObj, correctAnswer, index, dme) 
{
    //initalize variables used in the function
    var isOK = false;
    var answer = "";
  var result = incorrect;
    
    //finds each radio button and if it checked sets the answer as that element
    for ( i = 0; i < ( formObj.elements.length - 2 ); i++ ) 
    {
        currElem = formObj.elements[i];
    if ( currElem.type == "radio" && currElem.checked ) 
        {
              isOK = true;
              answer = currElem.value;
              break;
    }
  }
  
  if ( !isOK ) 
    {
        alert( "Please select an answer." );
    } 
    else 
    {
        // store the answer
        storeDataValue("cmi.interactions."+index+".learner_response", answer);
        
        //check to see if user's answer is correct
        if( answer == correctAnswer )
        {
              result = correct;
        
              // store the result, since we only are storing that they got this question correct
              storeDataValue("cmi.interactions."+index+".result", "correct");
        } 
        else 
        {
              // store the result as incorrect
              storeDataValue("cmi.interactions."+index+".result", "incorrect");
        }
        
        //refer to function definition below
        //displayFeedback(result, feedback);
    }
    
    feedbackPage = dme+'_cca_question_fb.html';
    GoToPage( feedbackPage );
  //return isOK;
}

function checkbox_validate(formName, index, dme, InteractionObject)
{
    numRight = 0;
    numWrong = 0;

    var learnerResponse = "";
    var totalOptions = formName.elements.length - 2
    var i;
    var numChecked = 0;
    
    //loop to see how many are checked
    for ( i = 0; i < totalOptions; i++ ) 
    {
        currElem = formName.elements[i];
          if ( currElem.type == "checkbox" && currElem.checked ) 
        {
              numChecked++;
              }
      }
    
    //loop to create the learner's response
    if(numChecked > 0)
    {
        var numAdded = 0;
        for ( i = 0; i < totalOptions; i++ ) 
        {
              currElem = formName.elements[i];
              
              if ( currElem.type == "checkbox" && currElem.checked ) 
              {
                  learnerResponse += formName.elements[i].value;
                  numAdded++;
                  if (numAdded < numChecked)
                  {
                      learnerResponse += "[,]";
                      
                  }
          }
        }
    
        // Set the Interaction ID
        storeDataValue("cmi.interactions."+index+".id", InteractionObject.id);
              
        // Set the Interaction type for this "interaction"
        storeDataValue("cmi.interactions."+index+".type", InteractionObject.type);
        
        // set the Interaction's correct response to "correctAnswer"
        storeDataValue("cmi.interactions."+index+".correct_responses.0.pattern", InteractionObject.correctAnswer);
        
        // to describe this Interaction, we'r using the actual test question
        storeDataValue("cmi.interactions."+index+".description", InteractionObject.description );
    
        // since we are demonstrating Score in this example, we are weighting questions differently 
        // The weight will be used to calculate the scaled score on the results page.
        storeDataValue("cmi.interactions."+index+".weighting", InteractionObject.weighting );

        // store the answer
        storeDataValue("cmi.interactions."+index+".learner_response", learnerResponse );
        
        //check to see if the answers are correct.
        correctPattern = retrieveDataValue( "cmi.interactions."+index+".correct_responses.0.pattern" );
    
        //check to see if they selected all of the right answers
        if( learnerResponse == correctPattern )
        {
              // store the result, since we only are storing that they got this question correct
              storeDataValue("cmi.interactions."+index+".result", "correct");
        }
        else
        {
              // store the result, since we only are storing that they got this question correct
              storeDataValue("cmi.interactions."+index+".result", "incorrect");
        }
    
        //go to the feedback page
        feedbackPage = dme+'_cca_question_fb.html';
        GoToPage( feedbackPage );
    }
    else
    {
        alert ( "Please select an answer." );
    }     
}//end function


/*******************************************************************************
**
** This function validates any forms that need to check a text input box. It checks to
** see if the user entered any text and then checks if the user's answer is correct.
** It then calls displayFeedback() and outputs the result to the user.
** 
**
** Inputs: formName - string - the id of the form to check
**               answerOptions - array - holds all possible correct answers
**               feedback - string - the text to be displayed on screen
**               index - integer 
**
** Return: isOK - Boolean
**
*******************************************************************************/

function text_validate(formName, answerOptions, index, dme, InteractionObject)
{
    var result = incorrect;
    var answer = formName.answer.value;
    
    //check to see if the user entered an answer
    if( Trim(answer) == "" || answer == null)
    {
        alert( "Please input an answer." );
    }
    else
    {
        // Set the Interaction ID
        storeDataValue("cmi.interactions."+index+".id", InteractionObject.id);
              
        // Set the Interaction type for this "interaction"
        storeDataValue("cmi.interactions."+index+".type", InteractionObject.type);
        
        // set the Interaction's correct response to "correctAnswer"
        var t = InteractionObject.correctAnswer.length;
        
        for ( var i = 0; i < t; i++ )
        {
              storeDataValue("cmi.interactions."+index+".correct_responses." + i + ".pattern", InteractionObject.correctAnswer[i] );
        }
        // to describe this Interaction, we'r using the actual test question
        storeDataValue("cmi.interactions."+index+".description", InteractionObject.description );
    
        // since we are demonstrating Score in this example, we are weighting questions differently 
        // The weight will be used to calculate the scaled score on the results page.
        storeDataValue("cmi.interactions."+index+".weighting", InteractionObject.weighting );
        
        // store the answer
        storeDataValue("cmi.interactions."+index+".learner_response", answer);
        
        answer = Trim( answer.toLowerCase() );
        
        //loop through the possible
        for( i=0; i < answerOptions.length; i++ )
        {
              if( answer == answerOptions[i] )
              {
                  result = correct;
                  // store the result, since we only are storing that they got this question correct
                  storeDataValue( "cmi.interactions."+index+".result", "correct" );
                  break;
              }
        }
        if( result == incorrect )
        {
              // store the result, since we only are storing that they got this question correct
              storeDataValue( "cmi.interactions."+index+".result", "incorrect" );
        }
        
        //go to the feedback page
        feedbackPage = dme+'_cca_question_fb.html';
        GoToPage( feedbackPage );
    }     
}//end function


/*******************************************************************************
**
** This function checks matching question answers. It checks to
** see if the user matched a term to every definition and prompts otherwies. Then checks to see
** if the answers are correct. it calls displayFeedback to output results to the user.
** 
** Inputs: formName - string
**               dme - string - the name of the data model element being tested. (all lower case)
**               index 
**
** Return: isDone - Boolean
**
*******************************************************************************/
function checkMatching( formName, index, dme )
{
    numRight = 0;
    numWrong = 0;
    numDefs = formName.elements.length-2;
    var badData = false;

    var learnerResponse = "";
    
    //check to see if user typed an answer for every definition
    var i;
        
    for( i = 0; i < numDefs; i++ )
    {                                 
        var learnerAnswer = formName.elements[i].value;
        if(learnerAnswer == "")
        {
              badData = true;
              break;
        }
        else
        {     
              learnerResponse += formName.elements[i].name + "[.]" + learnerAnswer;

              if( i < numDefs-1 )
              {
                  learnerResponse += "[,]";
              }

              //check to see if answers are correct. The name and value attributes must be equal to be right
              if( formName.elements[i].name == formName.elements[i].value.toLowerCase() )
              {
                  numRight++;
              }
              else
              {
                  numWrong++;
              }
        }
    }
    
    if( badData == false)
    {
        // store the answer
        storeDataValue("cmi.interactions."+index+".learner_response", learnerResponse );
        
    }
              
    //check to see if they got all right
    if( numRight == numDefs )
    {
        isCorrect = true;
        
        // store the result, since we only are storing that they got this question correct
        storeDataValue("cmi.interactions."+index+".result", "correct");
    }
    else
    {
        // store the result, since we only are storing that they got this question correct
        storeDataValue("cmi.interactions."+index+".result", "incorrect");
        
    }
    feedbackPage = dme+'_cca_question_fb.html';
    GoToPage( feedbackPage );
}//end function


/*******************************************************************************
**
** Finds the element with with id "feedback" and writes text between the appropriate tags
** 
** Inputs:     result - string
**               feedback - string
**
** Return: Displays the appropriate feedback at the specified location
**
*******************************************************************************/
function displayFeedback(result, feedback)
{   
    //document.getElementById('feedback').innerText=result+feedback; 
    
    if( result == correct ){
        document.getElementById('right').style.color = "teal";
    }
    if( result == incorrect ){
        document.getElementById('wrong').style.color = "orange";
    }


//--------------------------------------------------------------------------------


//END functions to check answers

function storeLearnersCode( feedbackPage, startingIndex )
{
        if (startingIndex == null)
        {
              var index = retrieveDataValue("cmi.interactions._count");
        }
        else
        {
              index = startingIndex;
        }
        
        var numExercises = applicationExercise.elements.length - 1;
        var appID = "";
        var currentIndex = index;
        var lastIndexNumber = index + (numExercises - 1);
        for ( i = 0; i < ( numExercises ); i++ ) 
        {     
              if(i != 0)
              {
                  currentIndex++;
              }
              
              appID = "app_ex_"+currentIndex;
              
              // Set the Interaction ID
              storeDataValue("cmi.interactions."+currentIndex+".id", appID);
              
              storeDataValue("cmi.interactions."+currentIndex+".type", "fill-in");
              
              currElem = applicationExercise.elements[i];
              answer = currElem.value;
              
              // store the answer
              storeDataValue("cmi.interactions." + currentIndex + ".learner_response", answer);
        }
        GoToPage( feedbackPage );
}
    
    
    
function loadHeader( dme )
{
        
        // Get the header and subheader from the params
        var g_params = new Array(10);
    
        // These will hold the value of the parameters you sent in using the item parameter attribute:
        //DME = g_params["DME"];
        //lesson = g_params["lesson"];
        //lesson = "testing";
        document.write("<!-- Course Title -->");
        document.write("<h1 id=\"smallTitle\">Sharable Content Object Reference Model (SCORM<span style=\"font-size:xx-small; vertical-align:text-top\">®</span>) 2004</h1>");
        document.write("<h1> Data Model Elements</h1>");
        
        document.write("<!-- Section Title that appears in top box -->");
        document.write("<h2>"+dme+"</h2>");
        
        //check to see if the dme being loaded in is 'Welcome' or 'Data Model Overview'
        if( dme == "Welcome" || dme == "Data Model Overview" || dme == "Application" || dme == "Feedback" )
        {
              document.write("<!-- Top nav links: Glossary, Best Practices for Id, RTE, Best Practices for Developer -->");
              document.write("<div id=\"links\">");
              document.write("<ul>");
                  document.write("<li id=\"glossary\"><a href=\"javascript:popup( '../html_assets/glossary.html' )\">Glossary</a> | </li>");
                  document.write("<li id=\"rte\"><a href=\"javascript:popup('<a href="http://www.adlnet.org/index.cfm?fuseaction=rcdetails&libid=648." target="_blank">http://www.adlnet.org/index.cfm?fuseaction=rcdetails&libid=648.</a>')\">SCORM</a></li>");
              document.write("</ul>");
              document.write("</div>");
        }
        else
        {
              document.write("<!-- Top nav links: Glossary, Best Practices for Id, RTE, Best Practices for Developer -->");
              document.write("<div id=\"links\">");
              document.write("<ul>");
                  document.write("<li id=\"glossary\"><a href=\"javascript:popup( '../../html_assets/glossary.html' )\">Glossary</a> | </li>");
                  document.write("<li id=\"rte\"><a href=\"javascript:popup('<a href="http://www.adlnet.org/index.cfm?fuseaction=rcdetails&libid=648." target="_blank">http://www.adlnet.org/index.cfm?fuseaction=rcdetails&libid=648.</a>')\">SCORM</a></li>");
              document.write("</ul>");
              document.write("</div>");
        }
}


/**********************************************************************
** Function: get_params()
** Description: This function is used to get the parameters from the
**           query string
**********************************************************************/
function get_params()
{
    var strSearch = window.location.search;
    var idx = strSearch.indexOf('?');
    if (idx != -1) 
    {
      var pairs = strSearch.substring(idx+1, strSearch.length).split('&');
      alert("testing");
          for (var i=0; i<pairs.length; i++) 
      {
        nameVal = pairs[i].split('=');
        g_params[nameVal[0]] = nameVal[1];
              alert(nameVal[0]+"and"+nameVal[1]);
      }
      }
      
}

标签:FunctionsjsSCORMRTE客户端javascript详细内容
分类:制作技术| 发布:可木| 查看: | 发表时间:2006-12-1
如果网站内容侵犯了您的权利,请跟站长联系!www.iscorm.cn scorm标准研究与elearning研究网站
本文链接:http://www.iscorm.cn/post/Functions.jsSCORMRTE.html

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Design By Seanloo.cn| 管理 | Power By Z-Blog 1.8 Walle Build 100427.