2016-04-06 7 views
0

Ich habe meinen Code ziemlich schlecht gemacht, also brauche ich ein bisschen Hilfe.Wie habe ich mein Javascript durcheinander gebracht?

Ich erhalte die folgende Fehlermeldung:

SyntaxError: expected expression, got end of script

Der Fehler sagt mir zu sein scheint, dass ich entweder eine Klammer oder Semikolon deplatziert und wegen der verrückten Art von heute habe ich nur Ich kann es nicht finden. Ich versuchte gerade, mein Javascript weniger aufdringlich zu machen, indem ich die Ereignis-Listener-Funktionalität unter einem window.onload-Funktionshandler innerhalb von UserInterface.js bewegte; Allerdings musste ich ein "Fields" -Array zwischen PHP und dem onload-Ereignis übergeben, daher möchte ich das onload-Ereignis in folgendem Verzeichnis behalten: <body onload="OnLoad('.$EncodedFields . ');">';, es sei denn, jemand kann mir einen besseren Weg zur Übergabe dieser Variablen nennen.

Irgendwie in meiner Einmischung habe ich diesen Fehler ausgelöst. Kann jemand diesen Fehler beheben? Und wie sollte ich eine PHP-Variable richtig an Javascript übergeben, um in einem Onload-Event verwendet zu werden?

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

Wenn Sie viel JavaScript schreiben, verwenden Sie ['jslint'] (https://www.npmjs.com/package/jslint), um zu überprüfen, ob Ihr Code gültig ist. – tadman

+0

Es gibt keine größeren Syntaxfehler im Code soweit ich sehen kann – JordanHendrix

+0

Alle jslint sagt mir ist, dass ich _ '"strict" verwenden sollte; 'vor' Konsole '. Das hilft leider nicht viel. –

Antwort

1

So offensichtlich:

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

Ist das, was eigentlich das Problem verursacht wurde. Aus irgendeinem Grund habe ich noch nicht recht herausgefunden, warum der php-Verkettungsoperator in diesem Fall nicht funktioniert.

Das Ändern dieser Zeile in body onload="OnLoad{$EncodedFields};" oder das Vertauschen der einfachen und doppelten Anführungszeichen (beim Entfernen der Punkte) wurde ebenfalls behoben.

Verwandte Themen