2016-04-06 7 views
0

J'ai mal codé mon code, j'ai donc besoin d'un peu d'aide.Comment ai-je gâché mon Javascript?

Je reçois l'erreur suivante:

SyntaxError: expected expression, got end of script

L'erreur semble me dire que je soit une attelle ou semi-colon sur place et à cause de la nature folle d'aujourd'hui, je viens ne peut pas sembler le trouver. J'étais en train d'essayer de rendre mon Javascript moins envahissant en déplaçant la fonctionnalité d'écouteur d'événement sous un gestionnaire de fonction window.onload dans UserInterface.js; cependant, je devais passer un tableau "Fields" entre PHP et l'événement onload, donc je veux garder l'événement onload dans: <body onload="OnLoad('.$EncodedFields . ');">';, sauf si quelqu'un peut me dire une meilleure façon de passer cette variable.

D'une façon ou d'une autre dans mon ingérence, j'ai déclenché cette erreur. Est-ce que quelqu'un sait comment corriger cette erreur? Et comment je devrais passer correctement une variable php à Javascript pour être utilisé dans un événement onload?

UserInterface.php

class UserInterface { 
    var $ParentAppInstance; 
    function __construct($AppInstance){ 
     $this->ParentAppInstance = $AppInstance; 
     $this->DrawPageHTML(); 
     $this->DrawDBSetDropdown(); 
     $this->DrawQueryForm(); 
    } 


    //Override thjis function to change the HTML and PHP of the UI page. 
    protected function DrawPageHTML(){ 
     $DBSet_Num = filter_var($this->ParentAppInstance->CurrentDBSet_Str, FILTER_SANITIZE_NUMBER_INT); 
     $CurrDBSet_Obj = $this->ParentAppInstance->DBSets_Arr[$DBSet_Num]; 
     $EncodedFields = json_encode($CurrDBSet_Obj->GetDBSetFields()); 
     echo '<body onload="OnLoad('. $EncodedFields .');">'; 
     echo ' 
      <div id="DebugOutput"></div> 
     </body> 


     '; 
     //json_encode($CurrDBSet_Obj->GetDBSetFields()) 
     echo '$AppInstanceData: ' . '<br>'; 
     echo '--CurrentDBSet_Str: ' . $this->ParentAppInstance->CurrentDBSet_Str; 
    } 

    protected function DrawDBSetDropdown(){ 
     echo '<div align="right">'; 
      echo '<select onchange="SwitchDatabaseSet();" name="DBSetList" form="DBSetSelector" id="DBSetSelector">'; 
      $i = 0; 
      foreach ($this->ParentAppInstance->DBSets_Arr as $DBSet){ 
       if ($DBSet->DBSetName == $this->ParentAppInstance->CurrentDBSet_Str){ 
        echo '<option value="' . $DBSet->DBSetName . '">' . $DBSet->DBSetName . '</option>'; 
       } 
      } 

      foreach ($this->ParentAppInstance->DBSets_Arr as $DBSet){ 
       if ($DBSet->DBSetName == $this->ParentAppInstance->CurrentDBSet_Str){/* DO NOTHING. IE. IGNORE IT*/} 
       else if ($DBSet->DBSetName == 'DBSet0'){/* DO NOTHING. IE. IGNORE IT*/} 
       else{ 
        //Add the DBSet to the dropdown list. 
        $i++; 
        echo '<option value="' . $DBSet->DBSetName . '">' . $DBSet->DBSetName . '</option>'; 
       } 
      } 
      echo '</select>'; 
     echo '</div>'; 

    } 

    protected function DrawQueryForm(){ 
     echo '<form action="search.php" method="post">'; 
      echo '<div id="QFormBody">'; 
      $NumActiveQBoxes = $this->ParentAppInstance->Config['ApplicationSettings']['NumberDefaultQueryOptions']; 
      for ($i = 0; $i < $NumActiveQBoxes; $i++){ 
       echo '<div class="QueryBox" name="QBox_' . $i . '">'; 
        echo '<select name=Field_' . $i . '">'; 
         $DBSet_Num = filter_var($this->ParentAppInstance->CurrentDBSet_Str, FILTER_SANITIZE_NUMBER_INT); 
         $CurrDBSet_Obj = $this->ParentAppInstance->DBSets_Arr[$DBSet_Num]; 
         foreach($CurrDBSet_Obj->GetDBSetFields() as $Field){ 
          echo '<option>' . $Field . '</option>'; 
         } 
        echo '</select>'; 
        echo '<input type="text"></input>'; 
        echo '<button class= "RMButton" type="button">-</button>'; 
       echo '</div>'; 
      } 
      echo '<button type="button" id="add" onclick="AddQueryBox();">+</button>'; 
      echo '<button type="submit" id="submit">SEARCH</button>'; 
     echo '</Form>'; 
     $EncodedFields = json_encode($CurrDBSet_Obj->GetDBSetFields()); 

     echo '<script src=/GLS_DBSearchProject/JavaScript/UserInterface.js></script>'; 
    } 
} 

UserInterface.js

var DBSetFields = []; 
var NumQBoxes = 3; 

function OnLoad(Fields){ 
    console.log("Alpha"); 
    console.log(Fields); 
    CloneDBSetFields(Fields); 

    var RMNodeList = document.getElementsByClassName('RMButton'); 
    for (var i = 0; i < RMNodeList.length; ++i) { 
     console.log(RMNodeList[i]); 
     RMNodeList[i].onclick = RemoveQBox; // Calling myNodeList.item(i) isn't necessary in JavaScript 
    } 
} 

function Fields_FOREACH(ELEMENT, INDEX, ARRAY){ 
    var FieldOption = document.createElement('option'); 
    FieldOption.setAttribute('value', ARRAY[INDEX]); 
    FieldOption.innerHTML = ARRAY[INDEX]; 
    this.appendChild(FieldOption); 
} 

function CloneDBSetFields(Fields){ 
    console.log("CloneDBSetFields"); 
    DBSetFields = Fields; 


} 

function AddQueryBox(){ 
    NumQBoxes += 1; 
    var NewQBox = document.createElement('div'); 
    NewQBox.setAttribute('class', 'QueryBox'); 

    //Create and fill Field Selector dropdown "select" element 
    var FieldSelector = document.createElement('select'); 
    FieldSelector.setAttribute('name', 'Field_' + NumQBoxes); 
    //foreach element in Fields 
    console.log(DBSetFields); 
    DBSetFields.forEach(Fields_FOREACH, FieldSelector); 
    //Create and fill 
    var QueryText = document.createElement('input'); 
    QueryText.setAttribute('type', 'text'); 
    QueryText.setAttribute('name', 'Query_' + NumQBoxes); 

    //Create "-" Remove button for removing query lines. 
    var RemoveButton = document.createElement('button'); 
    RemoveButton.innerHTML = "-"; 
    RemoveButton.setAttribute('type', 'button'); 
    RemoveButton.setAttribute('class', 'RMButton'); 
    RemoveButton.addEventListener("click", RemoveQBox); 

    //Combine the individual elements into a new query box and insert the new query box into the HTML Document 
    NewQBox.appendChild(FieldSelector); 
    NewQBox.appendChild(QueryText); 
    NewQBox.appendChild(RemoveButton); 
    document.getElementById("QFormBody").insertBefore(NewQBox, document.getElementById("add")); 

} 

function RemoveQBox(e){ 
    console.log("Remove"); 
    var RemoveButton = this; //this == e.currentTarget 
    console.log(RemoveButton); 
    var QBox = RemoveButton.parentNode; 
    QBox.remove(); 
    NumQBoxes -= 1; 
} 
+5

Si vous écrivez beaucoup de JavaScript, utilisez ['jslint'] (https://www.npmjs.com/package/jslint) pour vérifier que votre code est valide. – tadman

+0

il n'y a pas d'erreurs de syntaxe majeures dans le code autant que je peux voir – JordanHendrix

+0

Tout jslint me dit est que je devrais _ '"utiliser strict"; 'avant' console '._ Cela malheureusement ne aide pas beaucoup. –

Répondre

1

donc apparemment:

body onload="OnLoad('. $EncodedFields .');"

Est-ce qui a été à l'origine en fait la question. Pour une raison quelconque, je n'ai pas encore compris pourquoi, l'opérateur de concaténation php ne fonctionne pas dans ce cas.

La modification de cette ligne à body onload="OnLoad{$EncodedFields};" ou l'échange des guillemets simples et doubles (lors de la suppression des points) a également corrigé ce problème.